Компонент архитектуры навигации - BottomNavigationView позволяет избежать перезагрузки фрагмента - PullRequest
1 голос
/ 15 января 2020

Я использую BottomNavigationView, чтобы показать несколько фрагментов из моего графика навигации.

Нижняя навигационная панель настроена так в моем MainActivity:

val navController = findNavController(R.id.mainNavigationFragment)
setupActionBarWithNavController(navController)
bottomNavigationView.setupWithNavController(navController)

Каждый фрагмент имеет свой собственный FragmentScoped viewmodel для обслуживания его содержимого.

Перебирая каждую вкладку в bottomnavview, я вижу воссозданный фрагмент, который, в свою очередь, вызывает создание нового экземпляра модели представления для этого фрагмента. , Что приводит к вызовам api fre sh для повторного извлечения данных.

Как мне избежать повторного получения этих данных?

Я знаю, что могу сделать следующее:

  1. Использовать модель представления Activity для размещения всех эти данные, но это просто сделает одну модель представления, содержащую данные для всех моих фрагментов.

  2. Кэшируйте ответ API, так что воссоздание фрагмента будет просто получать данные из кеша, вместо того, чтобы делать fre sh сетевой вызов

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

Спасибо

1 Ответ

0 голосов
/ 16 января 2020

Лучше настроить ViewPager с основанием TabLayout (можно стилизовать его так, чтобы он выглядел очень похоже, за исключением того, что у него нет этих пронумерованных значков), тогда вы можете определить порог за пределами экрана, который количество оставшихся в живых страниц - хотя с навигацией это довольно пагубный подход, так как фрагменты просто заменяются, без каких-либо или тогда.

...