Как сохранить состояние просмотра и восстановить его, когда пользователь возвращается? - PullRequest
0 голосов
/ 30 сентября 2019

Я создаю приложение для Android, в котором у меня есть взаимодействие с двумя различными представлениями, чтобы пользователь мог переключаться между ними одним нажатием кнопки. Обратите внимание, что я использую метод setContentView. Итак, как я могу сохранить состояние каждого представления (содержащее EditText, кнопки, которые можно включить / отключить) и восстановить его, когда пользователь покидает представление и возвращается к нему?

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


@Override
protected void onSaveInstanceState(Bundle State) {
    super.onSaveInstanceState(State);
    State.putCharSequence("key" , txt.getText());
}

(txt)EditText.

@Override
protected void onRestoreInstanceState(Bundle State) {
    super.onRestoreInstanceState(State);
    txt.setText(State.getCharSequence("key"));
}

public void method1(View view) {
    setContentView(R.layout.id1);
}

public void method2 (View v){
   setContentView(R.layout.id2); 
}

Я хочу восстановить состояние layout1, когда пользователь возвращается к нему.

1 Ответ

0 голосов
/ 30 сентября 2019

Я рекомендую прочитать о жизненном цикле Activity, в частности, о сохранении и восстановлении состояния пользовательского интерфейса, которое можно найти здесь . По сути, вам нужно сохранить состояние пользовательского интерфейса в onSaveInstanceState().

РЕДАКТИРОВАТЬ: сейчас происходит то, что значение EditText не сохраняется, так как вы сначала позвонили super.onSaveInstanceState(state). Сначала сохраните значение EditText в Bundle, затем наберите super.onSaveInstanceState(state):

@Override
protected void onSaveInstanceState(Bundle State) {
    State.putCharSequence("key" , txt.getText());
    super.onSaveInstanceState(State);
}

Затем на вашем onRestoreINstanceState вам не нужно звонить super, вы можете просто взятьсохраненное значение и немедленно установите его на EditText.

...