onSavedInstanceState не сохраняет мой экземпляр - PullRequest
1 голос
/ 18 марта 2020

Надеюсь, у вас все хорошо в эти трудные времена.

У меня есть 2 действия, A и B.

A имеет кнопку, которая позволяет намерению go от A к B. В самом B есть диалоговое окно, кнопка cancel которого позволяет использовать Intent для go из B в A.

Я хотел бы сохранить некоторые данные из A (содержимое 2 EditTexts), поэтому, когда Я возвращаюсь к ИИ, мне не нужно перепечатывать эти EditTexts.

Так что после просмотра документации и небольшого количества StackOverflow я решил go с помощью метода onSavedInstance, но мне интересно, переход намерения уничтожает Activity и, следовательно, saveInstance, а также ...

Вот мой упрощенный код - Activity A:

public class A extends AppCompatActivity {
    Intent intent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new_match);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);

        if (savedInstanceState != null) {
            EditText firstPlayer = findViewById(R.id.firstPlayerName);
            EditText secondPlayer = findViewById(R.id.secondPlayerName);

            String firstPlayerName = savedInstanceState.getString("firstPlayerName");
            String secondPlayerName = savedInstanceState.getString("secondPlayerName");

            firstPlayer.setText(firstPlayerName);
            secondPlayer.setText(secondPlayerName);
        }

    }

@Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);

        EditText firstPlayer = findViewById(R.id.firstPlayerName);
        EditText secondPlayer = findViewById(R.id.secondPlayerName);
        String firstPlayerName = String.valueOf(firstPlayer.getText());
        String secondPlayerName = String.valueOf(secondPlayer.getText());
        savedInstanceState.putString("firstPlayerName", firstPlayerName);
        savedInstanceState.putString("secondPlayerName", secondPlayerName);
    }

}

Когда я отладил его, я заметил, что он прошел через onSavedInstance и он сохранил значения, но однажды в onCreate значение savedInstanceState будет нулевым.

Любой совет?

Заранее спасибо и позаботьтесь о людях.

Фарес.

1 Ответ

0 голосов
/ 18 марта 2020

Вы заметили, что «кнопка отмены позволяет Намерение на go от B до A.». Похоже, вы создаете новый экземпляр Activity A (поэтому ваш стек активности A, B, A), а состояние экземпляра задается c для отдельного экземпляра.

Вместо этого вам следует Вернитесь к A, просто вызвав finish() на B. Это вернется к исходному экземпляру A, в котором будут ваши данные.

...