0

我通过应用循环创建了多个复选框。

for(int l=0;l<len;l++)
{
chkBox = dynamicUiComponents.myCheckBox(context, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT), 100+i, "Unchecked", opts[l]);
myLayout.addView(chkBox);
}

显示所有复选框。但是当我在该复选框上应用 setOnCheckedChangeListener(l) 时,只有最后添加的复选框文本是打印机。这是因为每次在循环中,我都会为 chkBox 变量提供一个新的对象引用。所以在这里如何识别哪个 chechbox 被点击了。

4

4 回答 4

1

在您的代码中,您没有创建一个数组CheckBoxes,您只创建了一个。所以, usingsetOnCheckChangedListener(I)不会指checkBox. 要么在循环内设置监听器,要么给每个唯一的 ID 以便稍后引用它并设置监听器:

for(int l=0;l<5;l++) { chkBox = new CheckBox(context); 
chkBox.setOnCheckChangedListener(
//your implementation
);
myLayout.addView(chkBox); }
于 2012-10-20T11:53:38.717 回答
0

您可以将 id 添加到标签:

for(int id=0;id<5;id++) { 
 chkBox = new CheckBox(context);
 chkBox.setTag(id); 
 myLayout.addView(chkBox); 
}

你可以使用:

Integer i = (Integer) chkBox.getTag();
于 2012-10-20T11:48:07.533 回答
0

尝试以下

for(int l=0;l<5;l++) 
{ 
    chkBox = new CheckBox(context); 
    myLayout.addView(chkBox); 
    chkBox.setTag(""+l);
    chkBox.setOnCheckChangeListener(new ...(){   
        int x = Integer.ValueOf(chkBox.getTag());
        //do whatever you want to do here
    });
}
于 2012-10-20T11:54:17.080 回答
0

You can set a different tag for each Checkbox and set the listener on THIS, you activity should implement the listener and then do whatever you want when the event is trigger.

于 2012-10-20T12:11:01.533 回答