java - 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)); 工作正常。当我包含该语句并运行应用程序,然后旋转设备时,我的应用程序似乎崩溃了。
解决方案
推荐阅读
- laravel - 错误未定义的错误:laravel中的添加
- python - 在 Python while 循环中运行太远的索引之一
- r - 用R中的另一个矩阵对矩阵进行子集
- javascript - 努力在自定义滑块上编写分页按钮的功能
- git - 合并成主破码无冲突
- javascript - 如何使用 Discord.JS 从对私人消息(不是频道消息)的反应中执行某些代码?
- python - 安装散景时出现问题:[WinError 126] 找不到指定的模块
- android - 如何从网页视图中的长点击链接获取 URL?
- reactjs - 将为 jsx 编写的“enquireScreen”js 转换为打字稿?
- php - Laravel 气闸与 Laravel 护照