有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案