Android-приложение теряет состояние при переключении вкладок и ориентации - PullRequest
1 голос
/ 10 декабря 2010

Проблема: У меня есть приложение для Android с вкладками, и я теряю содержимое в TabOne всякий раз, когда выполняю следующие (по общему признанию странные) шаги:

  1. Переход на другую вкладку.
  2. Переключение ориентации в альбомную ориентацию.
  3. Переключение ориентации обратно в портретную ориентацию.
  4. Изменение обратно на TabOne.

Описание приложения для Android: У меня есть довольно простое Android-приложение с тремя вкладками, созданными с помощью google's TabLayout tutorial , мы будем называть их TabOne, TabTwo и TabThree.Только TabOne имеет какой-либо контент: простой EditText вид и Button, который позволяет добавлять текст в тело TabOne.Для этого используется пользовательский ArrayAdapter, который может иметь какое-то отношение к странному поведению.

Обратите внимание, что этого не происходит, если я меняю ориентацию, оставаясь на TabOne .Это потому, что я реализовал OnSaveInstanceState() и OnRestoreInstanceState(), чтобы сохранить мой список данных в моем TabOneActivity классе.

Ответы [ 2 ]

4 голосов
/ 17 октября 2012

У меня была та же проблема - решение, которое я нашел, состояло в том, чтобы создать вкладку «Пустышка» и действие для первой вкладки в TabLayout onCreate, затем в onResume Действия макета вкладки скрыть вкладку «Пустышка» и выбрать 2-я вкладка программно. Не хорошо, но работает как сохраняет состояние 2-й вкладки (т.е. 1-й видимой вкладки).

@Override

protected void onResume() {

    super.onResume();

    if (getTabHost() != null && getTabHost().getTabWidget()!= null) {

        getTabHost().getTabWidget().getChildAt(0).setVisibility(View.GONE);

        if (getTabHost().getCurrentTab() == 0) {

            getTabHost().setCurrentTab(1);

        }

    }

}
1 голос
/ 11 декабря 2010

Вам также необходимо восстановить состояние активности в onCreate, а также в OnRestoreInstanceState.

Следует отметить, что этот метод предназначен только для временных данных, а не для долгосрочного хранения данных. Для этого вы должны сохранить данные в базе данных или в SharedPreferences в onPause, а затем получить данные в onResume.

...