Java 基于android中其他复选框的状态控制复选框的状态
我有三个复选框,如果其中任何两个被选中,我想立即禁用第三个复选框。我不知道如何继续。在每个复选框上添加更改处理程序或单击处理程序,让它调用一个小方法,负责检查每个复选框的值:如果其中两个为真,则禁用第三个 例如:Java 基于android中其他复选框的状态控制复选框的状态,java,android,Java,Android,我有三个复选框,如果其中任何两个被选中,我想立即禁用第三个复选框。我不知道如何继续。在每个复选框上添加更改处理程序或单击处理程序,让它调用一个小方法,负责检查每个复选框的值:如果其中两个为真,则禁用第三个 例如: checkbox1.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton but
checkbox1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
handleCheckBoxes();
}
});
//Do this for all the checkboxes
private void handleCheckBoxes(){
int checkedCount = 0;
CheckBox uncheckedBox = null;
if(checkBox1.isChecked()){
checkedCount++;
}
else{
uncheckedBox = checkBox1;
}
if(checkBox2.isChecked()){
checkedCount++;
}
else{
uncheckedBox = checkBox2;
}
if(checkBox3.isChecked()){
checkedCount++;
}
else{
uncheckedBox = checkBox3;
}
if(checkedCount == 2){
uncheckedBox .setEnabled(false);
}
else{
//enable all checkboxes
checkBox1.setEnables(true);
checkBox2.setEnables(true);
checkBox3.setEnables(true);
}
尝试以这种方式实施:
private ArrayList<Integer> integers = null;
integers = new ArrayList<>();
chkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
int position = (int) yourview.getTag();
if (chkBox.isChecked()) {
integers.add(position);
chkBox.setChecked(true);
} else {
if (integers.size() > 0) {
for (int i=0; i<integers.size(); i++) {
if (integers.get(i) == position) {
integers.remove(i);
}
}
});
if (integers.size() > 2) {
//Disable your third checkbox
}
private ArrayList integers=null;
整数=新的ArrayList();
chkBox.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
试一试{
int position=(int)yourview.getTag();
if(chkBox.isChecked()){
整数。相加(位置);
chkBox.setChecked(真);
}否则{
if(integers.size()>0){
对于(int i=0;i 2){
//禁用第三个复选框
}
管理列表中的复选框,以便您可以对其进行迭代
List<CheckBox> boxes = new ArrayList<>();
在checkedChangeListener上添加一个,如下所示:
for(CheckBox box : boxes){
box.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
manageBoxes();
}
});
}
最后是您的managebox()
只是一个快速而肮脏的想法。希望这能奏效。
另外:这是可伸缩的,因此如果需要,您可以包含更多复选框。在伪代码中,这将是:
创建变量来保存选中的复选框数量,我们称之为amountChecked
选中复选框时=>增加选中的数量
选中复选框时=>检查amountChecked
是否等于或大于allowedAmountChecked
(本例中为2)
=>如果它大于或等于allowedAmountChecked
则禁用其余复选框我有三个复选框,但我没有任何向前推进的逻辑。我至少需要向前推进的逻辑看看这个:我认为奇怪的是,这个问题至少得到了两次向上投票。从这里开始向下投票除此之外,你应该展示你到目前为止所做的工作,缩小问题范围,而不是要求一个全面的解决方案。同时描述你读过的资源(开发人员文档、教程等)为了理解手头的问题。我们是来帮助你的,但我们不会为你做所有的工作。请表现出一些承诺。@janus,正如我之前所说的,我只是想继续逻辑。如果你真的想知道我读了什么,我写了什么代码,在我得到req后不要担心使用我的同伴提供的逻辑得出的结果,我会将其发送给Hered您是否有任何演示或示例?是的,例如,我想计算电压,然后我需要电流电阻或功率的两个量中的任何一个。因此,如果用户选择电流和电阻复选框,则功率复选框应为disabled@NikeshPatel请c查看编辑文章中的代码。我没有测试它,但你可以看到逻辑…希望这有助于这看起来很难看。@miva2这不是部署人的代码。他要求提供逻辑,这只是为了显示过程。但是有了这样的计数器,你仍然需要注意显示旋转。将计数器存储在savedInstanceState例如。
for(CheckBox box : boxes){
box.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
manageBoxes();
}
});
}
private void manageBoxes(){
int count = 0;
for(CheckBox box : boxes){
count += box.isChecked()?1:0;
}
if(count>=2){
for(CheckBox box : boxes){
box.setEnabled(box.isChecked());
box.setClickable(box.isChecked()); // not sure if needed
}
}else{
// reset all boxes
for(CheckBox box : boxes){
box.setEnabled(true);
box.setClickable(true);
}
}
}