Проблема перезагрузки фрагмента архитектуры навигации - PullRequest
0 голосов
/ 21 января 2019

Я использую навигационную архитектуру в галерее изображений, когда я перехожу из фрагмента А в В, а затем возвращаюсь обратно к А, эти 3 метода вызываются снова , что приведет к перезагрузке моей галереи , где я должен загрузить свои данные фрагментарно, чтобы при возвращении из B в A мои методы не вызывались? :

  1. OnCreateView
  2. OnViewCreated
  3. OnResume

Step A to B

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

navigate(...) реализовано с использованием Fragment.instantiate(...) на FragmentNavigator. В представленном примере я бы порекомендовал вызвать popBackStack() для возврата к предыдущему фрагменту вместо navigate(...)

0 голосов
/ 21 января 2019

Методы жизненного цикла фрагмента в любом случае будут вызваны снова.Вы можете узнать, как работать с фрагментом или жизненным циклом действия.

Основная идея работы с жизненным циклом состоит в сохранении состояний просмотра, сохранении данных и т. Д. Если вы используете фрагменты, вы можете использовать сохранение фрагментов: просто в своем фрагменте галереи установите флаг setRetainInstance(true), и система победит.Например, не вызывайте методы onCreate() и onDestroy(), пока будете поворачивать телефон.Следующим шагом я рекомендую вам использовать AndroidArchitectureComponent, который был представлен в 2017 году Вы можете прочитать об этом здесь.

В вашем случае, я думаю, вам следует создать ViewModel для вашего фрагмента, загрузить данные вваш ViewModel и поместите данные в объект LiveData.Более того, вы должны переопределить onCreate во фрагменте и сохранить фрагмент (как это сделать, я только что описал ранее) и инициировать вашу ViewModel здесь.После этого в onViewCreated или onActivityCreated вам нужно наблюдать за вашими данными через LiveData и ViewModel и просто показывать их без перезагрузки.

Это основной алгоритм.Подобное поведение может быть достигнуто с помощью различных подходов, таких как MVP, RxPM, MVVM (на основе RxJava и RxAndroid) и т. Д. Я полагаю, что не главная цель моего ответа - описать все эти шаблоны здесь.В Интернете много информации (также и о StackOverflow), просто попробуйте найти ее.

Основная идея заключается в том, что вы должны загрузить в объект что-то, что может выжить, пока представление разрушается, и просто сказать:представление, чтобы получить доступные данные из этого объекта, когда представление будет готово сделать это.

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