соглашусь в с ookami_kb и Beanut " биндятся все элементы дерева" и ненужно «вызывать notifyDataSetChanged()» толку от такой реализации нет.
нужно было посмотреть как реализованы, так ненавистные вам, сторонние библиотеки и если не использовать их, то подсмотреть решение этой проблемы
решение следующее: в списке данные хранятся в древовидной структуре
отображаем только элементы первого порядка
клик по родительскому элементу — копируем все его дочерние элементы и вставляем в список после позиции родителя. notifyItemRangeInserted — обновляет только добавленные элементы (еще и анимацию из коробки получите)
аналогично при закрытии удаляем из общего списка столько последующих элементов сколько есть у родителя в дочерних notifyItemRangeRemoved
нужно было посмотреть как реализованы, так ненавистные вам, сторонние библиотеки и если не использовать их, то подсмотреть решение этой проблемы
решение следующее: в списке данные хранятся в древовидной структуре
отображаем только элементы первого порядка
клик по родительскому элементу — копируем все его дочерние элементы и вставляем в список после позиции родителя. notifyItemRangeInserted — обновляет только добавленные элементы (еще и анимацию из коробки получите)
аналогично при закрытии удаляем из общего списка столько последующих элементов сколько есть у родителя в дочерних notifyItemRangeRemoved