0

正在开发的程序正在使用 API 来收集所需的所有信息,从而使活动非常动态。由于这种动态特性,演示布局,比如 x.xml 被用来指定这些元素的样式。布局包含标题、信息和复选框。我遇到的问题是我只能参考布局的最后一个复选框,因为它们都具有与布局中指定的相同的 ID。有什么办法可以参考/循环布局中的所有复选框?不只是使用这种布局的最后一个复选框元素?

布局文件

包含以下内容:

<TextView>
<TextView>
<CheckBox android:id>

java类下面的代码来引用它:

CheckBox check =(CheckBox)findViewById(R.id.checkBox);
check.setOnClickListener .... 

由于我正在使用 apis,因此我正在使用AsyncTask's OnPostExecute来填写活动。

4

2 回答 2

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(替代,或在末尾):

本身

$.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
    }
});
于 2013-08-16T12:49:39.973 回答
1

好吧,如果所有复选框都具有相同的 ID,那么您将只能获得对它们的一个引用。也许尝试创建一个视图,并以编程方式创建复选框以将它们添加到视图中。然后HashMap<String, Checkbox>,您可以将字符串作为复选框的 ID,因此您可以在运行时检索正确的复选框。

于 2013-08-16T11:31:16.290 回答