[英]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.