Использовать вложенный RecyclerView внутри элементов другого RecyclerView это нормально?
Или есть другие способы реализации разворачивающегося детального списка при клике на элементе с итогами?
Сейчас есть список+адаптер+холдер, которые выводят список с итогами под суткам.
И список+адаптер+холдер, которые выводят детальный список внутри суток. Второй список выводится в RecyclerView, расположенный как GONE в layout первого RecyclerView, загружается при клике на итоге и отображается.
Я бы сделал один RecyclerView. При нажатии изменял бы список данных, и использовал DiffUtil. Также написал бы анимацию появления/скрытия нужным мне образом. Ресайклер всё это и даже больше позволяет.
Один список с данными из двух источников ещё не делал )
Если правильно понял, то надо
- сделать абстрактный класс в котором можно указать тип контента и метод запроса этого типа.
- унаследовать от него модели итогов и записей.
- при открытии загружать список из таблицы итогов.
- при клике на элементе итога, загружать детальные и инсёртить их после кликнутого элемента списка.
- обновлять ресайклер в котором на основании типа элемента списка загружать разные холдеры.
- при сворачивании, удалять детальные элементы и обновлять ресайклер.
Александр Синицын, не понял, зачем там абстрактный класс.
Нужен маркерный (без методов) интерфейс MyData, который реализуют различные дата-классы. В адаптер сеттится List. В зависимости от конкретного типа отдаётся нужный холдер. Удобно реализовать всё это позволяет библиотека AdapterDelegates от Дорфмана.
Дальше всё примерно как вы описали.
Денис Загаевский, Спасибо. Переделал через AdapterDelegates и DiffUtil. Стало понятней и красивее. Все вроде работает, осталось разобраться почему DiffUtil отрабатывает при сворачивании не совсем корректно, перерисовывает итоги ниже убранных детальных элементов.