如何获取在 android 中以编程方式编写的选中复选框的选定值?

How can I get the selected value of the checked checkboxes written programmatically in android?

我在android里面有一个程序化写的CheckBox,它是程序化写的,因为CheckBox的值会根据网上的内容,所以基本上,程序没有关于要打印多少 CheckBox 的想法。我使用for循环打印复选框,它是成功的,但是在这些复选框中,我想获得将要被选中的CheckBox的值。
我该怎么做?

String ans = _jsonObject.optString("choices").toString();
String[] ansar = ans.split("`");
cb = new CheckBox[ansar.length];
for (int z = 0; z<ansar.length; z++){
    CheckBox cb = new CheckBox(survey);
    cb.setText(ansar[z]);
    choiceslayouts.addView(cb);
}

您需要创建一个布尔数组来保存所有复选框的状态
然后为每个 CheckBox

添加 setOnCheckedChangeListener
String ans = _jsonObject.optString("choices").toString();
String[] ansar = ans.split("`");
boolean[] array = new boolean[ansar.length];

for (int z = 0; z<ansar.length; z++){
       ...
       cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
           @Override
           public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
                array[z] = isCheck;
           }
       });
}


您可以为每个 CheckBox 设置 tag 以检查 CheckBox

的状态

1.Implement onClickListener 为你的 Activity

public YourActivity extends Activity implements View.OnClickListener

2.Then 为每个 CheckBox 设置标签

for (int z = 0; z<ansar.length; z++){
    ...
    cb.setTag("tag"+z);   
    cb.setOnClickListener(this);
}

3.Finnaly,实施onClick

     public void onClick(View v) {
            switch (v.getTag()) {
                case "tag0":
                     if(((CheckBox) v).isChecked()) {
                          // your checkbox 0 is checked
                     }else{
                          // your checkbox 0 is not checked
                     }
                     break;
                case "tag1":
                     // do the same
                     break;
                ...
            }
        }

希望对您有所帮助

我认为您应该使用具有自定义布局和自定义适配器的 ListView or a RecyclerView,以优化性能。无论如何,无需对代码进行重大更改就可以实现所需的功能。 您的问题是,在 for 循环中,您重新创建了一个与前一个复选框具有完全相同属性的新复选框,因此即使您将其添加到您的父视图中,您基本上也是在一遍又一遍地添加相同的复选框,并且您可以' t 监听 "single" 复选框中的事件。 你应该尝试这样的事情:

String ans = _jsonObject.optString("choices").toString();

String[] ansar = ans.split("`");
final boolean[] cbValue = new boolean[ansar.length];
cb = new CheckBox[ansar.length];
for (int z = 0; z<ansar.length; z++){
    cb[z] = new CheckBox(survey);
    cb[z].setText(ansar[z]);
    cb[z].setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            cbValue[z] = !cbValue[z];
        }
    });
    choiceslayouts.addView(cb[z]);
}

cbValue[] 应该包含您的复选框的值。

这里没有error-checking,但应该能给你思路。