for循环中的动态按钮onclick事件

时间:2012-04-13 18:07:20

标签: android

我正在使用此代码在for循环中创建动态按钮..

LinearLayout linearLayout =  (LinearLayout)findViewById(R.id.linearLayout2);
for (int i=0 ; i<10; i++){
LinearLayout l = new LinearLayout(this);
l.setOrientation(LinearLayout.HORIZONTAL);

TextView textview = new TextView(this);
textview.setText("Text view" + i);
textview.setId(i);

l.addView(textview);
Button button = new Button(this);
button.setText("View");
button.setId(i);
button.setWidth(90);
button.setHeight(60);
l.addView(button);
linearLayout.addView(l);//if you want you can layout params linearlayout
}

现在我想基于迭代i值为每个按钮添加onclick事件..任何人都可以建议我如何实现这个...提前感谢..

4 个答案:

答案 0 :(得分:4)

创建一个按钮阵列......

Button[] buttons=new Button[10];

而不是这一行

Button button = new Button(this);
你的for循环中的

使用

 button[i] = new Button(this);

并在同一个循环中设置你的onclicklistener就像这样......并根据你要求的问题根据迭代i值为每个按钮添加onclick事件我认为你有相同的onclicklistener for all按钮..

    button[i].setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
        //your onclicklistener code
}

});

答案 1 :(得分:2)

创建List Button个,然后在创建后将每个Button添加到该列表中......

List<Button> list = new ArrayList<Button>();
for (int i=0 ; i<10; i++){
LinearLayout l = new LinearLayout(this);
l.setOrientation(LinearLayout.HORIZONTAL);

TextView textview = new TextView(this);
textview.setText("Text view" + i);
textview.setId(i);

l.addView(textview);
Button button = new Button(this);
button.setText("View");
button.setId(i);
button.setWidth(90);
button.setHeight(60);
l.addView(button);
linearLayout.addView(l);//if you want you can layout params linearlayout
list.add(button);
}

然后使用高级for循环遍历列表并为每个Button添加单击侦听器..

for(Button btn : list){
btn.setOnClickListener(this);
}

答案 2 :(得分:0)

在你的循环之外创建一个新的View.OnClickListener

OnClickListener ocl = new OnClickListener(){
    @Override
    public void onClick(View v){
        switch(v.getId()){
        case 1:
            // click action
            break;
        case 2: 
            // click action
            break;
        }
        // ...etc
    }
}

根据按钮的ID,在这种情况下,i的迭代,您可以执行各种操作。但是,这可以是任何内容,例如按钮文本上的if...else块或您设置的标记。

然后在循环内,在addView(l)之前,分配它:

button.setOnClickListener(ocl);

答案 3 :(得分:0)

添加button.setOnClickListener(this);在forloop

并在oncreate():::

下添加以下代码
@Override
public void onClick(View v){
switch(v.getId()){
case 0:
// click action for first btn
break;
case 1: 
// click action for 2nd btn
break;
soon upto 
case 9: 
// click action for 9th btn
break;
}
}

ypur活动也必须实现onClickListerner。