Обновление данных в 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)
    }

}

Ответы (0 шт):