Как я могу восстановить состояние AdapterViewFlipper во фрагменте? - PullRequest
0 голосов
/ 08 июня 2018

У меня есть Fragment, который показывает другое представление на AdapterViewFlipper.AdapterViewFlipper устанавливается с MyCustomAdapter, который содержит «View 1», «View 2», «View 3» и «View 4», и это в файле ресурсов макета, который я надувал в своем собственном фрагменте «onCreateView»() ".

Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я поворачиваю свое устройство, текущий вид в AdapterViewFlipper возвращается к первому виду, который был добавлен в MyCustomAdapter.

* 1010.* Например: если текущее представление в AdapterViewFlipper показывает «Представление 2» и пользователь поворачивает устройство, оно возвращается к «Представлению 1».Поэтому я пытаюсь восстановить текущее представление в AdapterViewFlipper и его состояние во фрагменте всякий раз, когда я поворачиваю свое устройство.Хотя я нашел этот метод, который говорит, что я должен объявить атрибут android:configChanges для элемента в AndroidManifest, и он работал как чудо, но когда я читал об этом, Android не рекомендовал его.Но это прекрасно работает в Activity.Так есть ли способ, которым я могу пройти через это сам?

1 Ответ

0 голосов
/ 11 июня 2018

Итак, первое, что вам нужно сделать, это убедиться, что вы сохраняете сам фрагмент.И не помещайте новый экземпляр каждый раз, когда ваша деятельность воссоздается.

Вы можете установить это с помощью простой проверки в вашем методе onCreate().Вы можете либо проверить, является ли параметр savedInstance Bundle для onCreate() равным null, в этом случае только вам нужно заменить свой фрагмент ИЛИ проверить, уже добавлен ли ваш фрагмент к вашему FragmentManager.

if (savedInstanceState == null) {
    // This is a brand new activity, and not a re-creation due to config change
    getSupportFragmentManager().beginTransaction().replace(id, yourFragmentInstnace, stringTag);
}

ИЛИ

if (getSupportFragmentManager().findFragmentByTag(fragmentTag) == null) {
    // This is a brand new activity, and not a re-creation due to config change
    getSupportFragmentManager().beginTransaction().replace(id, yourFragmentInstnace, fragmentTag);
}

И вам также нужно вызвать setRetainInstance(true) в вашем фрагменте onCreate() или что-то в этом роде.

Это сохранит тот же экземпляр вашего фрагмента во времяизменение конфигурации.

Это должно автоматически позволить вашему AdapterViewFlipper поддерживать свое состояние пользовательского интерфейса, которое является текущим элементом, который он показывает.

Вы можете найти хороший пример здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...