为了账号安全,请及时绑定邮箱和手机立即绑定

CheckBox.setChecked()导致崩溃; CheckBox变量没有初始化,总是为空?

CheckBox.setChecked()导致崩溃; CheckBox变量没有初始化,总是为空?

莫回无 2019-04-18 14:15:57
我有一个包含几个复选框的对话框。创建对话框时,应根据指定的布尔变量的状态将框初始化为选中/取消选中。变量检查传递正常,但是当我使用CheckBox.setChecked(true / false)时,它会崩溃应用程序。经过一些研究和玩耍后,我注意到我用来指向复选框的Widget变量没有初始化,但我不明白为什么。我用相应的id连接它,但它似乎没有坚持。甚至单步执行代码,在我的findViewbyId()调用变量后立即显示为null。我不知道为什么。(虽然有5个复选框,但我将只显示一个代码,因为它们在功能上完全相同)MatrixActionActivity.javapublic class MatrixActionActivity extends AppCompatActivity {...     private CheckBox mHotSimCheck, mPublicCheck, mNoiseCheck, mDiffGridCheck, mSilentCheck;...@Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_actions);         mHotSimCheck = (CheckBox)findViewById(R.id.checkbox_hotsim); // <-- mHotSimCheck registers as null even after this statement         //This button opens preferences dialog         mPrefsButt.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View view) {                 AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MatrixActionActivity.this);                 LayoutInflater inflater = MatrixActionActivity.this.getLayoutInflater();                 final View dialogView = inflater.inflate(R.layout.dialog_matrix_action_modifiers, null);                 dialogBuilder.setView(dialogView);                 final MyDeck deck = MyDeck.getInstance();                 if(deck.isDiveDPActive) {                     Toast.makeText(MatrixActionActivity.this, "deck.isDiveDPActive = true.", Toast.LENGTH_SHORT).show();                      // <-- shows fine when next statement is removed                     mHotSimCheck.setChecked(true); // <-- Causes crash                 }else{                     mHotSimCheck.setChecked(false);                 }
查看完整描述

2 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

这是null因为xml你的setContentViewactivity_actions和包含复选框的xml是dialog_matrix_action_modifiers.xml,所以很明显它会在你的checkbox

在构建对话框之后

mHotSimCheck = (CheckBox) dialogView.findViewById(R.id.checkbox_hotsim);

不要忘记在setcontentview之后删除这一行

mHotSimCheck = (CheckBox)findViewById(R.id.checkbox_hotsim);

NB

你在哪里实例化你的变量mPrefsButt


查看完整回答
反对 回复 2019-05-15
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

该复选框不包含在activity的xml中,因此findViewById()返回null。
您必须在创建后初始化CheckBox内部:onClick()dialogView

mHotSimCheck = (CheckBox) dialogView.findViewById(R.id.checkbox_hotsim);


查看完整回答
反对 回复 2019-05-15
  • 2 回答
  • 0 关注
  • 738 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信