Почему onSaveInstanceState () не вызывается после нажатия кнопки «назад»? - PullRequest
0 голосов
/ 06 июля 2019

Я создаю приложение для игры в боулинг, которое будет включать в себя игру в бинго. Для упрощения, в классе Score есть кнопка, с которой начинается новое занятие (класс Bingo). Находясь в игре, наверняка нужно переходить от счета к бинго и обратно. Проблема, с которой я сталкиваюсь сейчас, заключается в том, что onSaveInstanceState не вызывается, когда я пытался «вернуться» из Бинго в Счет. Следовательно, числа бинго, которые должны быть зафиксированы, меняются каждый раз, когда я нажимаю кнопку «Игра», которая запускает бинго.

Я искал и пробовал все связанные ответы (включая https://developer.android.com/guide/components/activities/activity-lifecycle),, но у меня ничего не получалось. Я также пытался временно удалить screenOrientation для любого действия, когда я прочитал, что поворот экрана создаст новый экземпляр Вот мой код, связанный с проблемой.

Score.java (кнопка для перемещения Бинго)

 @Override
    public void onClick(View view) {

        String button_text;
        button_text = ((Button) view).getText().toString();

        if (button_text.equals("GAME")) {
            Intent gamePage = new Intent(this, Game.class);
            startActivity(gamePage);
        }

Game.java (bingo1 и bingo2 - это массив целых чисел)

...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game);

        ...

        if (savedInstanceState != null){
            bingo1 = savedInstanceState.getIntArray("bingo1");
            bingo2 = savedInstanceState.getIntArray("bingo2");
        }else {

            ...


     }

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {

        savedInstanceState.putIntArray("bingo1", bingo1);
        savedInstanceState.putIntArray("bingo2", bingo2);

        super.onSaveInstanceState(savedInstanceState);
    }

    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {

        super.onRestoreInstanceState(savedInstanceState);


        bingo1 = savedInstanceState.getIntArray("array1");
        bingo2 = savedInstanceState.getIntArray("array2");
    }

Поправьте меня, если вызов в onCreate () и onRestoreInstanceState одновременно является неправильным.

Как указывалось ранее, я пытался исправить число бинго во время движения вперед и назад от счета к игре / бинго, чего мне не удалось достичь с помощью этого кода. Я не знаю, есть ли еще код, который связан с этой проблемой, поскольку я все еще новичок, но это будет очень полезно, если вы, ребята, можете помочь. Спасибо!

1 Ответ

0 голосов
/ 06 июля 2019

Я предполагаю, что Бинго и Счет - оба действия.

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что onSaveInstanceState не вызывается, когда я пытался «вернуться» из Бинго на Оценка

Это не должно называться тогда. Ваш экземпляр активности Бинго уничтожается навсегда. У него больше нет состояния экземпляра для сохранения.

Если Бинго и Счет должны иметь общее состояние, то, возможно, они не должны быть отдельными видами деятельности. Вместо этого используйте одно действие, два фрагмента (Бинго и Счет) с общим ViewModel между ними.

...