0

我正在使用此代码在 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

4 回答 4

4

创建一个按钮阵列...

Button[] buttons=new Button[10];

而不是这条线

Button button = new Button(this);

在你的 for 循环中..使用

 button[i] = new Button(this);

并在同一个循环中设置您的 onclicklistener 像这样..并根据您提出的问题,根据迭代 i 值将 onclick 事件添加到每个按钮,我认为您对所有按钮都有相同的 onclicklistener..

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

});

于 2012-04-13T18:24:45.193 回答
2

创建一个Listof 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 循环遍历列表并为每个按钮添加点击侦听器..

for(Button btn : list){
btn.setOnClickListener(this);
}
于 2012-04-13T18:23:05.933 回答
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);
于 2012-04-13T18:16:01.837 回答
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。

于 2012-04-13T18:29:18.933 回答