【问题标题】:How can I get the selected value of the checked checkboxes written programmatically in android?如何在android中以编程方式获取选中复选框的选定值?
【发布时间】:2024-04-20 16:20:01
【问题描述】:

我有一个CheckBox在android中以编程方式编写,它以编程方式编写是因为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);
}

【问题讨论】:

    标签: android checkbox android-view android-checkbox


    【解决方案1】:

    您需要创建一个布尔数组来保存所有复选框的状态
    然后为每个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.为您的Activity实现onClickListener

    public YourActivity extends Activity implements View.OnClickListener
    

    2.然后为每个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;
                    ...
                }
            }
    

    希望有帮助

    【讨论】:

    • 如果我想存储所选复选框的 ID 或标签,并且我想在单击按钮上获取这些值?
    • 非常感谢!
    【解决方案2】:

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

    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[] 应该保存您的复选框的值。

    这没有错误检查,但它应该给你的想法。

    【讨论】: