我目前正在创建一个包含大量复选框的应用程序(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
问题是,当我尝试打开它时,我的活动崩溃,我将此代码添加到其中。如果我从中移除此代码,活动就会正常。
答案 0 :(得分:1)
所以你的代码失败的原因是:你将CheckBox变量声明为类字段,并在Activity启动时初始化它们,因此findViewById()
为所有这些变量返回null。
快速修复:在onClick方法中移动所有Checkbox声明。虽然看起来你可能在点击之前在其他地方使用它们。
更好的潜在解决方案:不要试图引用所有39个(!)复选框,最好只获取对容器的引用并遍历所有子项,检查如果它们是复选框,则取消选中它们。
我会说39个复选框似乎有点荒谬。