Извините, это немного бессмысленный ответ, но приведенного примера кода недостаточно, чтобы дать работающий ответ, поэтому более реально пытаться объяснить концепцию. Действительно нужны подробности того, когда и как обновляются данные, НО ...
Поскольку вы используете androidx, вы можете рассмотреть возможность перехода на viewpager2 или с помощью viewpager вы можете изменить способ управления состояниями жизненного цикла фрагмента.
Если вы перешли на использование BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
https://developer.android.com/reference/androidx/fragment/app/FragmentStatePagerAdapter#BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT при создании адаптера https://developer.android.com/reference/androidx/fragment/app/FragmentStatePagerAdapter#FragmentStatePagerAdapter (androidx.fragment.app.FragmentManager,% 20int)
Тогда все фрагменты будут переведены в «Запущено» только при создании или повторном создании и только текущее на экране с «Возобновлено» и затем «Приостановлено» при перемещении с экрана.
Точная механика зависит от того, как представления рециркулятора фрагментов получают свои данные и что запускает обновление, но тогда общая идея заключается в том, чтобы фрагменты onCreateView
создали легкую «оболочку» макета, у меня в основном есть кнопки / текст stati c и создайте просмотр рециркулятора с пустым набором данных.
Затем в методе onResume
фрагмента, который вызывается только для фрагмента, в настоящее время находящегося на Sc Затем он вызывает ваш метод update
, чтобы заменить два пустых набора данных в представлении реселлера фактическим набором данных, и делает notifyDataSetChanged()
для обзоров рециркулятора.
Поэтому, когда пейджер изначально создается, создается X количество фрагментов и там stati c содержимое выложено плюс 1 фрагмент (текущий на экране) получает представление переработчика, заполненное фактическими данными.
Затем вы можете также включить некоторые проверки оптимизации в onResume
фрагмента проверить, действительно ли изменились данные представлений в режиме просмотра обзоров (простая проверка размера или использование DiffUtils в Recyclerview), иначе при перемещении между фрагментами в окне просмотра каждый фрагмент будет приостановлен / возобновлен.
Это действительно только задерживает стоимость два повторных просмотра в фрагменте до тех пор, пока они действительно не понадобятся (когда он будет отображаться), это форма «отложенной загрузки»
с перемещением данных «dynamici c» в эту «отложенную загрузку» "Это может быть возможно, чтобы удалить необходимость notifyDataSetChanged
на Фра Но пока фрагменты кода недостаточно показывают, как и почему меняется содержимое вьюверлера.
При использовании этого метода изменяются данные при рисовании, и вам может не понравиться их внешний вид.
Это действительно на высоком уровне инверсия логики обновления фрагментов c, вместо того, чтобы сказать: «Данные изменились, перерисовать данные во всех фрагментах», это «Этот фрагмент показан, перерисовать данные, ЕСЛИ он был» изменилось с тех пор, как я нарисовал в последний раз "