java SavedIntanceState。getBoolean()使我的应用程序崩溃(我想)
我的目标: 因此,我需要帮助将布尔原语放入一个捆绑包中,并在Android中出现屏幕方向更改时从捆绑包中检索它。我在一个条件语句中使用该布尔值,该语句有助于决定是否应启用2个按钮视图(MTRUEBUTON、mFalseButton)。到目前为止,当屏幕旋转时,我所做的是导致应用程序关闭(也称为崩溃)。我认为我没有正确地从包中检索或写入布尔值,这导致应用程序崩溃
应用程序的工作原理: 当用户触摸MTRUE按钮或mFalseButton按钮回答问题时,这两个按钮都将被禁用,因此不允许用户再次回答。我希望在用户应答并旋转屏幕时,这些按钮保持禁用状态。**
我知道,当用户旋转他们的Android设备时,会调用onDestroy(),因为运行时配置发生了变化,导致应用程序在不知道其先前状态的情况下重新启动(除非将必要的数据存储到捆绑包中并将其传递到onCreate方法)
这些是我的活动类中的一些全局变量
private int index = 0;
priavate Button mTrueButton,mFalseButton;
private static final String KEY_INDEX = "index";
private static final String BTTN_ENABLED = "bttnEnabled";
private boolean trueFalseButtonsEnabled = true;
这是同一活动类的onCreate()方法中的一些语句
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate(Bundle) called");
setContentView(R.layout.activity_quiz);
if(savedInstanceState != null) {
index = savedInstanceState.getInt(KEY_INDEX, 0);
changeButtonEnableStatus(savedInstanceState.getBoolean(BTTN_ENABLED,true));
}
mTrueButton = (Button)findViewById(R.id.true_button);
mFalseButton = (Button)findViewById(R.id.false_button);
mTrueButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
checkAnswer(true);
changeButtonEnableStatus(false);
}
});
mFalseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
checkAnswer(false);
changeButtonEnableStatus(false);
}
});
}
这些方法位于同一活动类中,但不在我的onCreate()中。
private void changeButtonEnableStatus(boolean bool){
trueFalseButtonsEnabled = bool;
mTrueButton.setEnabled(bool);
mFalseButton.setEnabled(bool);
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState){
super.onSaveInstanceState(savedInstanceState);
Log.d(TAG,"onSavedInstanceState() called");
savedInstanceState.putInt(KEY_INDEX,index);
savedInstanceState.putBoolean(BTTN_ENABLED, trueFalseButtonsEnabled);
}
注意:
索引=savedInstanceState。getInt(键索引,0)
工作正常。它将全局变量“index”设置为等于存储在keywork“KEY_index”中的int原语
但是我不这么认为:ChangeButtonneEnableStatus(savedInstanceState.getBoolean(BTTN_ENABLED,true));机器运转正常。当我包含该语句并运行应用程序,然后旋转设备时,我的应用程序似乎会崩溃
共 (0) 个答案