Java 吐司味精为我的复选框验证而疯狂
我想为复选框创建一个验证。例如,如果提供者没有选中其中一个复选框,它将发出Toast消息,“请至少勾选一个选项。” 我的界面:- 我的验证方法编码:-Java 吐司味精为我的复选框验证而疯狂,java,android,checkbox,Java,Android,Checkbox,我想为复选框创建一个验证。例如,如果提供者没有选中其中一个复选框,它将发出Toast消息,“请至少勾选一个选项。” 我的界面:- 我的验证方法编码:- else if(!(cbBM.isChecked()) || !(cbBI.isChecked()) || !(cbMath.isChecked()) || !(cbSc.isChecked())) { Toast.makeText(getActivity(), "Please tick at least one of
else if(!(cbBM.isChecked()) || !(cbBI.isChecked()) || !(cbMath.isChecked()) || !(cbSc.isChecked()))
{
Toast.makeText(getActivity(), "Please tick at least one of your selections.", Toast.LENGTH_SHORT).show();
}
我的编码复选框:-
cbBM = view.findViewById(R.id.bm);
cbBM.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked)
{
if (isChecked) {
//DO NOTHING
}
else {
Toast.makeText(getActivity(), "Please tick at least one of your selections.", Toast.LENGTH_SHORT).show();
}
}
});
我面临的问题是,如果我没有勾选“Bahasa Melayu”选项,toast消息总是显示。使用&&
(逻辑AND)运算符,而不是|
(逻辑OR)使用
|
操作符,如果未选中任何复选框,您将看到烤面包片试试这个:
if(!cbBM.isChecked() && !cbBI.isChecked() && !cbMath.isChecked() && !cbSc.isChecked())
cbBM = view.findViewById(R.id.bm);
cbBM.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked)
{
checkNoSelection()
}
});
如果要使用侦听器,请按如下方式修改它:if(!cbBM.isChecked() && !cbBI.isChecked() && !cbMath.isChecked() && !cbSc.isChecked())
cbBM = view.findViewById(R.id.bm);
cbBM.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked)
{
checkNoSelection()
}
});
并为上面的其他3个复选框再创建3个侦听器这是
checkNoSelection()
方法:private void checkNoSelection() {
if(!cbBM.isChecked() && !cbBI.isChecked() && !cbMath.isChecked() && !cbSc.isChecked()) {
Toast.makeText(getActivity(), "Please tick at least one of your selections.", Toast.LENGTH_SHORT).show();
}
}
请注意,如果第一个表达式为true,则不会选中剩余表达式。所以,若未勾选Bahasa Melayu,则逻辑表达式下方始终为equal true,所以toast消息始终显示
!(cbBM.isChecked()) || !(cbBI.isChecked()) || !(cbMath.isChecked()) || !(cbSc.isChecked())
你可以试试这个:
private boolean showHint = true;
if(cbBM.isChecked()) showHint = false;
if(cbBI.isChecked()) showHint = false;
if(cbMath.isChecked()) showHint = false;
if(cbSc.isChecked()) showHint = false;
if(showHint == true){
Toast.makeText(getActivity(), "Please tick at least one of your selections.", Toast.LENGTH_SHORT).show();
}
编辑:
在其他地方添加上述代码,可以在
submit
按钮中单击listener,并将showHint
更改为class字段。仍然不能。我必须在Bahasa Melayu上打勾,然后祝酒词没有显示。。。。例如,如果我选择除Bahasa Melayu之外的一个选项,它将继续显示消息。@Daisy您是否做了所有更改?查看我编辑的代码。为什么要将setOnCheckedChangeListener
用于cbBM
?如果你这样做了,你应该检查如果(!cbBM.isChecked()&&!cbBI.isChecked()&&!cbMath.isChecked()&&!cbSc.isChecked()&)
否则每次你取消选中cbBM
@Daisy请查看我的答案,希望对你有帮助。@Daisy抱歉,我的代码错了,我会尽快修改它,把你的名字放进去!在括号内,如if(!cbBM.isChecked())|(!cbBI.isChecked()){}并测试它。@BhoomikaPatel仍然无法。。。