Pull to refresh

Comments 9

Не надо так делать. Вы просто убиваете все преимущества RecyclerView по работе с большими списками – у Вас просчитываются и биндятся все элементы дерева. Т.е. если у вас список из 10 элементов верхнего уровня, и у каждого по 100 детей, то в закрытом состоянии у вас список будет обрабатывать 1000 элементов.

Изменить 3 элемента в списке и вызывать notifyDataSetChanged(). Простите что? Вроде 2018й год на дворе, а люди все еще открывают для себя RecyclerView и пишут об этом статьи на хабр?
Подскажите тогда как можно отобразить деревовидный список в 2018 году без сторонних библиотек?
соглашусь в с ookami_kb и Beanut " биндятся все элементы дерева" и ненужно «вызывать notifyDataSetChanged()» толку от такой реализации нет.
нужно было посмотреть как реализованы, так ненавистные вам, сторонние библиотеки и если не использовать их, то подсмотреть решение этой проблемы

решение следующее: в списке данные хранятся в древовидной структуре
отображаем только элементы первого порядка
клик по родительскому элементу — копируем все его дочерние элементы и вставляем в список после позиции родителя. notifyItemRangeInserted — обновляет только добавленные элементы (еще и анимацию из коробки получите)
аналогично при закрытии удаляем из общего списка столько последующих элементов сколько есть у родителя в дочерних notifyItemRangeRemoved
Спасибо вам за идею. Надо будет попробовать
Вставлю свои 5 копеек: в целом ваша реализация наиболее правильна, но если уж очень хочется без дочерних списков, то можно оставить текущую структуру данных и делать выборку по робительскому id.

Позанудствую


//проверить родительский элемент или нет
Без взгляда на код, непонятно, что это за проверка


Слово 'родительский' в таком контексте не используется


Лучше //проверить, что элемент содержит дочерние элементы
И соответственно переименовать HasChildren например

И не надо использовать View в качестве разделителя элементов, для этого есть декораторы.
Sign up to leave a comment.

Articles