ресайкла,а именно сохранения поз. скролла но при переходе нав хоста в другой фрагмент и обратно ,позиция обнуляется.пытался заюзать stateRestorationPolicy но я так понял что это работает если что то пересоздается.в моем случае фрагмент с ресайклером не пересоздается,то есть лог в методе onDestroy ничего не пишет.есть варианты как решить проблему?
не дай умереть фрагменту который хранит список)
Да, вчера ж писали
ну так он вроде и не умерает,метод onDestroy не вызывается
И да, внутри фрагмента имеет значение жизненный цикл, к которому viewmodel привязана - activity scope, navigation scope.
да ,я заюзал stateRestorationPolicy == PREVENT_WHEN_EMPTY но почему то не помогает
ты уверен? почему тогда у ресайкла не хранится позиция?
Должно работать!
да,в методе onDestroy я специально добавил лог.юзается action_fragment1_to_fragment2 и обратно при нажатии на ресайкл.Интересно то что при нажатии на ресайкл и переходе к фрагменту,я вижу что ресайкл обнуляет позицию скролла.
я использую AsyncListDiffer в адаптере,это может как то повлиять?
ну. в лэйаут менеджере есть метод firstVisibleitemposition - сохраняешь его и скроллишься
Значит надо копать в сторону места откуда данные приходят
поставь больше логов и пойми че происходит
Не должен, я тоже diffutils использую. А список заполняешь через submitList?
да,submitList. лог в onDestroyView сработал
где ты инициализируешь адаптер и сетишь его ресакйлеру7
в onCreateView перед тем как подписаться на LiveData
покажи, там создается адаптер?
private fun setupRecyclerView() { linearLayoutManager = LinearLayoutManager(requireContext()) recyclerSynthesis.apply { layoutManager = linearLayoutManager adapter = synthesisAdapter adapter?.stateRestorationPolicy = RecyclerView.Adapter.StateRestorationPolicy.PREVENT_WHEN_EMPTY } } это вызывается в onCreateView
нет ,вот как создается адаптер private val synthesisAdapter by lazy { SynthesisAdapter() }
тут все ок, а как и где данные в адаптер заполняешь?
ну я подписываюсь на livedata во viewmodel,и при succes пишу вот это synthesisAdapter.differ.submitList(synthesisResponse.results)
и в onBindViewHolder заполняются данные
от чего наследуется адпатер твой, что у тебя самбитЛист? Мой совет тебе: проверить это место. Если там полностью подменяется весь список и вызывается нотифай дата сет ченджед, всё собьется
у меня val differ = AsyncListDiffer(this, differCallback) адаптер наследуется RecyclerView.Adapter<>
хорошо,сейчас попробую с нотифай
Обсуждают сегодня