通过单击按钮取消选中所有复选框

时间:2013-06-12 04:39:58

标签: java android eclipse button checkbox

我目前正在创建一个包含大量复选框的应用程序(39个是特定的)我希望实现一个按钮,在点击它时取消选中它们。我没有做太多的按钮(到目前为止我只用它们开始一项新的活动)所以我还不完全确定它们是如何工作的。在做了一些研究后,这就是我想出的。虽然我有39个复选框,但我只会在此代码中粘贴一些以保持简短。

CheckBox cb1 = (CheckBox) findViewById(R.id.checkBox2);
CheckBox cb2 = (CheckBox) findViewById(R.id.checkBox3);
CheckBox cb3 = (CheckBox) findViewById(R.id.checkBox4);
public void onClick (View v){
    switch (v.getId()) {
        case R.id.button1:
            cb1.setChecked(false);
            cb2.setChecked(false);
            cb3.setChecked(false);
    }
}

logcat的:

06-12 06:45:09.922: E/AndroidRuntime(6623): FATAL EXCEPTION: main 
06-12 06:45:09.922: E/AndroidRuntime(6623): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.gw2legendary/com.example.gw2legendary.Bifrost}: java.lang.NullPointerException 
06-12 06:45:09.922: E/AndroidRuntime(6623): Caused by: java.lang.NullPointerException

问题是,当我尝试打开它时,我的活动崩溃,我将此代码添加到其中。如果我从中移除此代码,活动就会正常。

1 个答案:

答案 0 :(得分:1)

所以你的代码失败的原因是:你将CheckBox变量声明为类字段,并在Activity启动时初始化它们,因此findViewById()为所有这些变量返回null。

快速修复:在onClick方法中移动所有Checkbox声明。虽然看起来你可能在点击之前在其他地方使用它们。

更好的潜在解决方案:不要试图引用所有39个(!)复选框,最好只获取对容器的引用并遍历所有子项,检查如果它们是复选框,则取消选中它们。

我会说39个复选框似乎有点荒谬。