Size: a a a

Moxy – MVP библиотека под Android

2020 May 13

w

whoami in Moxy – MVP библиотека под Android
но чтобы повторно не появилось при повороте экрана, стратегия должна быть SkipStrategy или OneExecuteStrategy ?
источник

АЕ

Алексей Ершов... in Moxy – MVP библиотека под Android
whoami
Ну то есть добавляем в адаптер recyclerview сообщение и вызываем notifyItemInserted , это да, так оно у меня и будет.
я и говорю, что не так. Обновляете модель чата, и кидаете на отображение весь чат. Recycler и diffUtil сам разберется, что там происходит
источник

АЕ

Алексей Ершов... in Moxy – MVP библиотека под Android
а весь список кидаете обычным AddToEndSingle
источник

АЕ

Алексей Ершов... in Moxy – MVP библиотека под Android
Если вы будете во фрагмент по одному сообщению кидать, это значит у вас фрагмент будет отвечать за хранение состояния списка сообщений. Верная дорога к провалу.
источник

w

whoami in Moxy – MVP библиотека под Android
Алексей Ершов
я и говорю, что не так. Обновляете модель чата, и кидаете на отображение весь чат. Recycler и diffUtil сам разберется, что там происходит
Я не совсем понял (

Вот у меня сейчас такая простетская архитектура:
есть адаптер, в нем хранится список сообщений в поле List<Message> .
Сообщений немного, потому что это скорее комментарии к заказу.
Это неправильная схема получается?
источник

АЕ

Алексей Ершов... in Moxy – MVP библиотека под Android
whoami
Я не совсем понял (

Вот у меня сейчас такая простетская архитектура:
есть адаптер, в нем хранится список сообщений в поле List<Message> .
Сообщений немного, потому что это скорее комментарии к заказу.
Это неправильная схема получается?
Недостаточная) Адаптер просто хранит те сообщения, которые сейчас показываются, это верно. Но лучше не делать его источником правды, а хранить "настоящий" список сообщений где-то ещё. Если не заморачиваться - то, например, в презентере. Из презентера в View всегда кидать полный список сообщений (копию, чтобы DiffUtil работал).
источник

АЕ

Алексей Ершов... in Moxy – MVP библиотека под Android
Загрузили сообщения, сохранили в презентере, кинули во View.
Написали новое сообщение, добавили его в список, который в презентере, закинули новую версию списка во View.
источник

w

whoami in Moxy – MVP библиотека под Android
Все, я кажется понял, спасибо большое!
источник

АЕ

Алексей Ершов... in Moxy – MVP библиотека под Android
Удачи)
источник

D

Dmitriy in Moxy – MVP библиотека под Android
про копию - важное уточнение
ибо внутри идёт проверка по ссылке
источник

АЕ

Алексей Ершов... in Moxy – MVP библиотека под Android
я когда на это наткнулся первый раз, дебажил полчаса, почему у меня список не обновляется)
источник

w

whoami in Moxy – MVP библиотека под Android
Да, заюзал ListAdapter и сделал, как предложено, все отлично, и появилось несколько новых возможностей. Спасибо!
источник
2020 May 14

P▽

Picty ▽ in Moxy – MVP библиотека под Android
Ребята, подскажите по кейсу пожалуйста:
1) в onFirstViewAttach() запускаем загрузку данных
2) при получении результата — сохраняется лист items и вместе с ним считается DiffUtil
3) В конце, вьюшке передается result(diff) + items
4) Вьюшка выводит

5) далее мы идем на фрагмент пункта листа и возвращаемся назад.
6) Т.к. у нас стратегия повтора стоит, то у нас повторяется пункт 3 и 4, но ресайкл пустой!

НО, если мы пару раз обновляли список и он не менялся, то result у нас стал таким, что НЕ будет обновлять ресайкл(потому как не было чего-то нового) — что и происходит в итоге — "подкапотно" пункты в ресайкл кладутся, result делает dispatchUpdatesTo — но пункты на экране НЕ появляются по  этой самой причине.

Как быть?

Понимаю, что есть вариант не запускаться из onFirstViewAttach() + Skip стратегия + запускаться после инициализации адаптера и прокидывать, что мы пустые и заново грузить весь список.
Но как-то глупо выходит — список то есть у презентера и можно его показать, но он не показывается, из-за того что резалт не даёт.

Этот эффект проявляется только когда у нас diffResult, т.к. просто задать пункты переданные из презентер — всё ок было бы.

Спасибо!
источник

АЕ

Алексей Ершов... in Moxy – MVP библиотека под Android
Picty ▽
Ребята, подскажите по кейсу пожалуйста:
1) в onFirstViewAttach() запускаем загрузку данных
2) при получении результата — сохраняется лист items и вместе с ним считается DiffUtil
3) В конце, вьюшке передается result(diff) + items
4) Вьюшка выводит

5) далее мы идем на фрагмент пункта листа и возвращаемся назад.
6) Т.к. у нас стратегия повтора стоит, то у нас повторяется пункт 3 и 4, но ресайкл пустой!

НО, если мы пару раз обновляли список и он не менялся, то result у нас стал таким, что НЕ будет обновлять ресайкл(потому как не было чего-то нового) — что и происходит в итоге — "подкапотно" пункты в ресайкл кладутся, result делает dispatchUpdatesTo — но пункты на экране НЕ появляются по  этой самой причине.

Как быть?

Понимаю, что есть вариант не запускаться из onFirstViewAttach() + Skip стратегия + запускаться после инициализации адаптера и прокидывать, что мы пустые и заново грузить весь список.
Но как-то глупо выходит — список то есть у презентера и можно его показать, но он не показывается, из-за того что резалт не даёт.

Этот эффект проявляется только когда у нас diffResult, т.к. просто задать пункты переданные из презентер — всё ок было бы.

Спасибо!
а накиньте кода, звучит как-то странно, что у вас ресайклер пустой.
источник

АЕ

Алексей Ершов... in Moxy – MVP библиотека под Android
и вы прям руками диффутил считаете в презентере?
источник

P▽

Picty ▽ in Moxy – MVP библиотека под Android
Алексей Ершов
и вы прям руками диффутил считаете в презентере?
юзаю FastAdapter + поделил логику подсчета result и обновы пунктов.

Вот краткий код:
https://pastebin.com/aGYbmqKn
источник

АЕ

Алексей Ершов... in Moxy – MVP библиотека под Android
что такое fast adapter
источник

D

Dmitriy in Moxy – MVP библиотека под Android
и зачем руками высчитывать diff?
источник

P▽

Picty ▽ in Moxy – MVP библиотека под Android
Алексей Ершов
что такое fast adapter
источник

P▽

Picty ▽ in Moxy – MVP библиотека под Android
Dmitriy
и зачем руками высчитывать diff?
там просто сравнение идентификатора(ид) да и всё
источник