验证线性布局中的多个复选框

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了验证线性布局中的多个复选框相关的知识,希望对你有一定的参考价值。

我正在尝试创建一个应用程序,列出每个人每天必须执行的所有预定义任务。为了标记它们,我在垂直线性布局中使用了复选框。我正在使用for循环来遍历布局。我希望如果选中一个复选框,整数(total)会增加1,如果未选中,则整数保持不变。这是方法:

CheckBox checkBox151, checkBox152, checkBox153;
LinearLayout sundayLayout;

int total = 0;
int[] boxState = {2, 2, 2, 2, 2, 2, 2};


public int formIsValid(LinearLayout layout) {
    boolean wasChecked = false;

    for (int i = 0; i < layout.getChildCount(); i++) {
        View v = layout.getChildAt(i);

        if (v instanceof CheckBox) {
            if (((CheckBox) v).isChecked() && boxState[i] == 2 && wasChecked == false) {
                total++;
                boxState[i] = 0;
                wasChecked = true;

            } else if (boxState[i] == 1 && wasChecked == true) {
                total = total - 1;
                boxState[i] = 2;

            } else if (boxState[i] == 0 && wasChecked == false) {
                boxState[i] = 2;
            }
        }
    }
    return total;
}

我尝试了各种各样的逻辑语句,但最终得到的是数字增加确定但是当我再次选中该框时递减(我希望它在未选中时递减,并且仅在选中时递增),但是当我尝试这个时应用程序崩溃由于错误的逻辑陈述。

需要即时帮助,并提前感谢...

答案

这是听众的主要目的。他们会观察您对组件所做的更改。

在你的情况下,你应该使用CompoundButton.OnCheckedChangeListener

在您的情况下,使用侦听器将只允许您跟踪相关更改(选中/取消选中)。因为只有在触发check / uncheck事件时才会调用它。

您也不需要通过每次在LinearLayout上循环来“验证”复选框的值,以便能够递增/递减计数器值。

以下是您在案例中使用它的方法:

public class MyActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener {

    private int counter;

    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);

        // ........

        CheckBox checkBox1 = findViewById (R.id.checkbox1);
        CheckBox checkBox2 = findViewById (R.id.checkbox2);
        CheckBox checkBox3 = findViewById (R.id.checkbox3);

        checkBox1.setOnCheckedChangeListener (this);
        checkBox2.setOnCheckedChangeListener (this);
        checkBox3.setOnCheckedChangeListener (this);
    }

    @Override
    public void onCheckedChanged (CompoundButton buttonView, boolean isChecked) {
        if (isChecked) {
            counter ++;
        } else {
            counter --;
        }
    }
}

然后在提交表单时,只需抓住counter变量并随意执行任何操作即可。

编辑:关于175要求,概念保持不变。你将为所有人注册一个听众。

OnCreate方法变为:

@Override
protected void onCreate (Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);

    // ........
    // For each one of the 7 layouts you'll call the following (better create a method containing the below)
    for (int i = 0; i < layout.getChildCount(); i++) {
        View v = layout.getChildAt(i);

        if (v instanceof CheckBox) {
            ((CheckBox)v).setOnCheckedChangeListener (this);
        }
    }

以上是关于验证线性布局中的多个复选框的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中的地图片段内中心线性布局?

如何通过单击片段内的线性布局从片段类开始新活动?下面是我的代码,但这不起作用

在android中的类内的对话框片段的线性布局中添加textview

在 Android 中使用具有多个布局的单个片段

如何在约束布局中对齐线性布局

Android 底部工作表布局边距