首页 > 解决方案 > SavedIntanceState.getBoolean() 使我的应用程序崩溃(我认为)

问题描述

我的目标: 所以我需要帮助将布尔基元放入包中,并在 Android 中的屏幕方向发生变化时从包中检索它。我在一个条件语句中使用该布尔值,以帮助确定是否应启用 2 个按钮视图(mTrueButton、mFalseButton)。到目前为止,我所拥有的是导致应用程序在屏幕旋转时关闭(又名崩溃)。我认为我没有正确地从我的包或我的包中检索或写入我的布尔值,这导致应用程序崩溃。

应用程序应该如何工作: 当用户触摸 mTrueButton 或 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);
}

注意:
index = savedInstanceState.getInt(KEY_INDEX, 0);
工作正常。它将全局变量“index”设置为等于存储在密钥“KEY_INDEX”中的 int 原语。

但是我不认为: changeButtonEnableStatus(savedInstanceState.getBoolean(BTTN_ENABLED,true)); 工作正常。当我包含该语句并运行应用程序,然后旋转设备时,我的应用程序似乎崩溃了。

标签: javaandroidbundleoncreateonsaveinstancestate

解决方案


推荐阅读