我通过代码而不是XML动态创建按钮。
代码如下:
dynamicview = (LinearLayout)findViewById(R.id.llayout);
LinearLayout.LayoutParams lprams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
for(int i=0;i<nob;i++){
Button btn = new Button(this);
btn.setId(i+1);
btn.setText("Button"+(i+1));
btn.setLayoutParams(lprams);
dynamicview.addView(btn);
}
我没有找到一种方法可以为每个按钮实现OnClickListener,以便我可以根据我得到的引用执行操作。
任何人都可以帮我解决这个问题。 ?
在此先感谢,
答案 0 :(得分:26)
请参阅以下代码:
for(int i=0;i<nob;i++) {
Button btn = new Button(this);
btn.setId(i+1);
btn.setText("Button"+(i+1));
btn.setLayoutParams(lprams);
final int index = i;
btn.setOnClickListener(new OnClickListener() {
void onClick(View v) {
Log.i("TAG", "The index is" + index);
}
});
dynamicview.addView(btn);
}
我的示例非常简单,但演示了如何将按钮索引导入OnClickListeber
。您可以访问声明的匿名类中的任何final
字段(例如OnClickListener
)。
答案 1 :(得分:5)
for(int i=0;i<nob;i++){
Button btn = new Button(this);
btn.setId(i+1);
btn.setText("Button"+(i+1));
btn.setOnClickListener(btnclick); <<<<<<<set click
btn.setLayoutParams(lprams);
dynamicview.addView(btn);
}
并在任何方法和类
之外添加此列表器 OnClickListener btnclick = new OnClickListener() {
@Override
public void onClick(View view) {
switch(view.getId()){
case 1:
//first button click
break;
//Second button click
case 2:
break;
case 3:
//third button click
break;
case 4:
//fourth button click
break;
.
.
.
default:
break;
}
}
};
答案 2 :(得分:2)
使用List
并将您创建的Button
添加到List
List<Button> list = new ArrayList<Button>();
现在将您的按钮添加到该列表
for(int i=0;i<nob;i++){
Button btn = new Button(this);
btn.setId(i+1);
btn.setText("Button"+(i+1));
btn.setLayoutParams(lprams);
dynamicview.addView(btn);
list.add(btn);
}
然后使用高级for循环遍历列表并为每个Button添加单击侦听器..
for(Button btn : list){
btn.setOnClickListener(this);
}
答案 3 :(得分:2)
对于我想将一个计数器变量用于动态创建的按钮组的人来说,这可能会有所帮助:
我为计数器创建了数组:
int[] squatReps;
根据偏好我已经采用了元素的数量:
squatReps = new int[squatSets]; // where squatSets is taken from preferences
最后我们创建按钮
for (int i = 0; i < squatSets; i++){
squatReps[i] = Integer.parseInt(sharedPreferences.getString("squats_reps", "0"));
final Button squat_b = new Button(this.getActivity());
squat_b.setId(i);
squat_b.setText("");
squat_b.setLayoutParams(layoutParams);
final int index = i;
squat_b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
squat_b.setText(Integer.toString(squatReps[index]--));
startTimer();
}
});
panel_1.addView(squat_b);
答案 4 :(得分:1)
同样的事情......
for(int i=0;i<nob;i++){
Button btn = new Button(this);
btn.setId(i+1);
btn.setText("Button"+(i+1));
btn.setLayoutParams(lprams);
btn.setOnCLickListsener(new listener());
dynamicview.addView(btn);
}
listener implemnets OnClickListenere{
public void onClick(View v){
}
}
答案 5 :(得分:1)
for(int i=0;i<nob;i++){
Button btn = new Button(this);
btn.setId(i+1);
btn.setText("Button"+(i+1));
btn.setLayoutParams(lprams);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
/////Do some job on button click
}
});
dynamicview.addView(btn);
}