簡體   English   中英

如何在Android上為動態創建的按鈕設置不同的操作(特別是-使用動態按鈕自動滾動到textview)

[英]how to set different actions to dynamiclly created button on android (specifically - auto scroll to a textview using a dynamic button)

我創建了一個包含多個文本視圖的布局。 我將文本視圖的ID保存在一個名為_resultId的類變量ArrayList中。

現在我想創建一些按鈕,這些按鈕應該滾動到正確的文本視圖(第一個按鈕到第一個文本視圖,等等)

問題是:如何將正確的id傳遞給press方法上的每個按鈕?

我嘗試使用全局變量_counter,但是當我運行程序時,所有按鈕都滾動到最后一個文本視圖

該方法的代碼:

private void addNavigationView(ViewGroup navigationLayout, ArrayList<Perek> mishnayot) 
{
    for (int i=0;i<mishnayot.size();i++)
    {
        _counter=i;
        String currentOt=mishnayot.get(i).getOt();
        Button button = new Button(getBaseContext());
        button.setText(currentOt);
        if (_resultId==null)
            throw new IllegalAccessError("missing result id link cannot be created");
        button.setOnClickListener(new OnClickListener() 
        {

            @Override
            public void onClick(View arg0) //make it scroll to correct textview
            {
                 new Handler().post(new Runnable() 
                 {
                     @Override
                     public void run() 
                     {
                         View currentView=findViewById(_resultId.get(_counter));
                         ScrollView scrollView=(ScrollView) findViewById(R.id.resultScroll);
                         scrollView.scrollTo(0, currentView.getTop());
                     }
                 });
            }
        });
         navigationLayout.addView(button);//add the button to panel
    }
    navigationLayout.setVisibility(View.VISIBLE);
}

在學習了有關Runnable接口的更多信息后,我找到了一個答案,對於那些會遇到類似問題的人來說,您需要創建一個同時實現runnable和OnClickListener的新類。

該類將包含額外的數據和一個可滿足您需求的構造函數。 設置按鈕的onClick方法時,將創建該類的新對象。 例如,在我的情況下,新方法如下所示:

public class ButtonHandler implements OnClickListener,Runnable 
{
private String _data;//data to be passed for the button
private ArrayList<Integer> _resultId;//the id's of the text views
private Activity _activity;

public ButtonHandler(String data,ArrayList<Integer> resultId,Activity activity)
{
    _data=data;
    _resultId=resultId;
    _activity=activity;
}

@Override
public void run() 
{
     View currentView=_activity.findViewById(_resultId.get(Integer.valueOf(_data)));
     ScrollView scrollView=(ScrollView) _activity.findViewById(R.id.resultScroll);
     scrollView.scrollTo(0, currentView.getTop());

}

@Override
public void onClick(View v) 
{
    new Handler().post(this);

}

}

現在從我使用的主要活動中調用它:

    private void addNavigationView(ViewGroup navigationLayout, ArrayList<Perek> mishnayot) 
{
    for (int i=0;i<mishnayot.size();i++)
    {
        _counter=i;
        String currentOt=mishnayot.get(i).getOt();
        Button button = new Button(getBaseContext());
        button.setText(currentOt);
        if (_resultId==null)
            throw new IllegalAccessError("missing result id link cannot be created");
        button.setOnClickListener(new ButtonHandler(i+"",_resultId,this));

        navigationLayout.addView(button);//add the button to panel
    }
    navigationLayout.setVisibility(View.VISIBLE);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM