в объекте койче меняется, и из-за этого ЛивДата обновляется и экран возвращается в начало всего ресайкла. Как это вылечить? чтобы экран оставался там где был?
Вы адаптер перезаписываете в обзервере?
viewModel.getLearnedWords().observe(this, learnedWords -> adapter.submitList(learnedWords)); adapter = new ArchiveAdapter(new ArchiveAdapter.ArchiveDiff(), this);
Вы когда адаптер перезаписываете у вас все сбрасывается Вам нужно обновить список в адаптере и вызвать один из методов notify... в зависимости от ваших нужд
А обзервер тогда этот отключить надо?
Зачем? Сделайте проверку что если у вас адаптера нет - создать его Если он есть - вызвать ему какой-нибудь updateItems
хмм
Обновляй не целиком список объектов, а конкретный элемент.
А проверку эту в обзервере делать?
К примеру, это может быть нечто вроде DTO с observable-полями, а сама view — не просто верстка, а layout с соответствующим байдингом. Таким образом у тебя будет меняться единственный элемент и изменения в данных не будут затрагивать список или порядок элементов в нем в самом recycler.
Ну вы же данные из него берёте?)
данные? из базы
Room?
да
В общем, да В обзервере
Любой вызов notifyDataSetChanged() вызовет перерисовку
Всего списка. А перерисовать нужно лишь вьюху конкретного элемента
До этого нужно обновить список его слов) И не факт что ему нужно обновлять весь список
Ресайклер не запоминает набор данных, он рисует постфактум
А я говорил что он его запоминает?)
действительно а разве любой нотифай не перезагрузит также весь ресайкл?🤔
Notify all только
Обсуждают сегодня