【问题标题】:How do I disable checkboxes after a number of checkbox selected?选中多个复选框后如何禁用复选框?
【发布时间】:2017-03-03 23:08:53
【问题描述】:

我有 10 个复选框,我想在最多选中 6 个复选框后禁用剩余的复选框。

如何使用OnCheckChangedListener解决问题。

如果我写如下代码,我需要重复10次

checkbox1.setOnCheckedChangeListener(new OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if (isChecked && numberOfCheckboxesChecked >= 6) {
        checkbox1.setChecked(false);
    } else {
    }
}};

如何减少冗余代码?

【问题讨论】:

  • 你需要维护一个布尔列表来检查复选框是否被选中。
  • @UserSharma 我可以举个例子吗?我是新手,不太懂

标签: android android-studio checkbox


【解决方案1】:

您可以创建命名类而不是匿名类:

checkbox1.setOnCheckedChangeListener(new MyCheckboxChangeListener());
checkbox2.setOnCheckedChangeListener(new MyCheckboxChangeListener());
...

private static class MyCheckboxChangeListener implements OnCheckedChangeListener {

    private static int numberOfCheckboxesChecked;

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked) {
            if (numberOfCheckboxesChecked >= 6) {
                buttonView.setChecked(false);
            } else {
                numberOfCheckboxesChecked++;
            }
        } else {
            numberOfCheckboxesChecked--;            
        }
    }
}

或者你可以在你的Activity中实现接口:

public class MainActivity extends AppCompatActivity implements OnCheckedChangeListener {

    ...
    private int numberOfCheckboxesChecked;
    ...

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        checkbox1.setOnCheckedChangeListener(this);
        checkbox2.setOnCheckedChangeListener(this);
    }

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked) {
            if (numberOfCheckboxesChecked >= 6) {
                buttonView.setChecked(false);
            } else {
                numberOfCheckboxesChecked++;
            }
        } else {
            numberOfCheckboxesChecked--;            
        }
    }

}

【讨论】:

  • 我创建了一个类之后,我只是在我的活动中实现了这个功能??
  • 我不确定你在问什么。但是,我举例说明的方法是Nested class。正如你所说,你也可以在你的活动中实现这个监听器。在这种情况下,您将使用checkbox1.setOnCheckedChangeListener(this),而您的活动将使用onCheckedChanged 方法。
  • 我已更新答案以包含您的建议。另外,我已经纠正了逻辑。
  • 也许你实现了错误的接口。尝试实现CompoundButton.OnCheckedChangeListener
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 2014-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多