SavedIntanceState.getBoolean () вызывает сбой моего приложения (я думаю) - PullRequest
0 голосов
/ 06 мая 2018

Моя цель: Поэтому мне нужна помощь, чтобы поместить булевы примитивы в пакет и извлечь его из пакета при изменении ориентации экрана в 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)); работает правильно. Кажется, что мое приложение зависает, когда я включаю этот оператор и запускаю приложение, а затем поворачиваю устройство.

...