Обновление данных в RecyclerView на страницах ViewPager2
уважаемые!
Подскажите, как правильно выстроить архитектуру взаимодействия классов.
Есть activity, на которой расположен ViewPager2 с адаптером наследником RecyclerView.Adapter<>. Количество страниц ViewPager-а не фиксировано и зависит от данных. На каждой странице пейджера, в свою очередь, расположены RecyclerView со списками. Объекты ViewHolder (страницы ViewPager-а) хранят в свойстве адаптеры расположенных на них RecyclerView.
Активити подписана на обновления данных из БД (через observe) и должна на основании этих изменений обновить данные в RecyclerView-ах на страницах ViewPager-а.
Сейчас я делаю так: В адаптере ViewPager-а, в функции onCreateViewHolder() сохраняю созданные объекты viewholder-ы в массив. При срабатывании observer-а, активити вызывает функцию адаптера пейджера (updateData), которая, в свою очередь, обходит массив объектов viewholder, получает из них адаптеры расположенных на них RecyclerView и отправляет изменение данных им.
Всё это выглядит громоздко (говнокодисто). Предполагаю, что есть более "чистый" вариант.
Код:
Активити получает изменения данных из БД и передаёт их в адаптер ViewPager-а:
...
viewModel.listsLifeData.observe(this, Observer { result -> pagerAdapter.updateData(result)
})
...
Адаптер пейджера хранит viewholder-ы (страницы pager-а) в массиве:
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PagerVH {
val curPagerVH = PagerVH(LayoutInflater.from(parent.context).inflate(R.layout.fragment_screen_slide_page, parent, false), context)
pagerVHs.add(curPagerVH)
return curPagerVH
}
Адаптер пейджера обходит массив viewholder-ов, получает из них адаптеры их recyclerview и передаёт изменение данных:
fun updateData(eventsEntities: List<EventEntity>) {
events = eventsEntities.toMutableList()
//Опущено несколько строк преобразования данных
....
for (curVH in pagerVHs) {
curVH.adapter?.submitList(eventsForList)
}
}