0

我目前正在制作一个带有很多复选框(具体为 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);
    }
}

日志猫:

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

问题是,一旦我尝试打开它,我的活动就会崩溃,我添加了这段代码。如果我从中删除此代码,则活动开始正常。

4

1 回答 1

1

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

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

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

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

于 2013-06-12T04:56:04.277 回答