Моя цель:
Поэтому мне нужна помощь, чтобы поместить булевы примитивы в пакет и извлечь его из пакета при изменении ориентации экрана в 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 = saveInstanceState.getInt (KEY_INDEX, 0);
работает правильно. Он устанавливает глобальную переменную "index" равной примитиву int, который был сохранен в работе ключа "KEY_INDEX".
Однако я не думаю: changeButtonEnableStatus (saveInstanceState.getBoolean (BTTN_ENABLED, true)); работает правильно. Кажется, что мое приложение зависает, когда я включаю этот оператор и запускаю приложение, а затем поворачиваю устройство.