验证线性布局中的多个复选框
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);
}
}
以上是关于验证线性布局中的多个复选框的主要内容,如果未能解决你的问题,请参考以下文章
如何通过单击片段内的线性布局从片段类开始新活动?下面是我的代码,但这不起作用