正在使用的程序正在使用api来收集所需的所有信息,从而使活动非常动态。由于这种动态特性,表示布局,例如x.xml用于指定这些元素的样式。 布局包含标题,信息和复选框。我遇到的问题是我只能参考布局的最后一个复选框,因为它们都具有布局中指定的相同ID。有什么方法可以引用/循环遍历布局中的所有复选框?不只是使用这种布局的最后一个复选框元素?
布局文件
包含以下内容:
<TextView>
<TextView>
<CheckBox android:id>
java类下面的代码引用它:
CheckBox check =(CheckBox)findViewById(R.id.checkBox);
check.setOnClickListener ....
因为我正在使用apis,所以我使用AsyncTask's OnPostExecute
来填写活动。
答案 0 :(得分:2)
使用droidQuery库非常简单。在您的活动中,请将其命名为:
$.with(this).selectByType(Checkbox.class.getName()).each(new Function() {
@Override
public void invoke($ droidQuery, Object... params) {
Checkbox cb = (Checkbox) droidQuery.view(0);
//TODO: manipulate each checkbox here.
}
});
要添加点击监听器,只需添加链式呼叫click
(相反,或在结尾处):
通过iteself
$.with(this).selectByType(Checkbox.class.getName()).click(new Function() {
@Override
public void invoke($ droidQuery, Object... params) {
Checkbox cb = (Checkbox) droidQuery.view(0);
//TODO: handle the clicked Checkbox
}
});
链式通话
$.with(this).selectByType(Checkbox.class.getName()).each(new Function() {
@Override
public void invoke($ droidQuery, Object... params) {
Checkbox cb = (Checkbox) droidQuery.view(0);
//TODO: manipulate each checkbox here.
}
}).click(new Function() {
@Override
public void invoke($ droidQuery, Object... params) {
Checkbox cb = (Checkbox) droidQuery.view(0);
//TODO: handle the clicked Checkbox
}
});
答案 1 :(得分:1)
如果所有复选框都具有相同的ID,那么您将只获得一个对它们的引用。也许尝试创建一个视图,并逐步创建CheckBoxes以将它们添加到视图中。然后,您可以使用HashMap<String, Checkbox>
,其中您的字符串是复选框的ID,因此您可以在运行时检索正确的复选框。