Анимированный поиск в RecyclerView - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь создать способ поиска в RecyclerView с анимацией искомых элементов (скрыть те, которые не соответствуют условию, и добавить те, которые выполняют, если они еще не в ).

Конечно, самый простой способ поиска RecyclerView - это просто отфильтровать список и notifyDataSetChanged(). Но большинство разработчиков знают, что этот вызов воссоздает адаптер с нуля, почти так же, как он был назначен. Кроме того, этот вызов не дает ощущения поиска предметов, так как все предметы появляются одновременно.

Я пытался создать способ, при котором элементы добавляются или удаляются в списке, когда они соответствуют / не соответствуют условию, но это теряет порядок элементов. Если, конечно, вы не ищете, где элемент находится в основном списке, и помещаете его туда, где он принадлежит. Что делает поиск дольше, так как вы снова ищите каждую вставку.

Я рассмотрел использование TreeMap, но деревья не могут быть доступны по индексу, только по ключу.

Я также использовал SparseArray, единственная проблема заключалась в том, что SparseArray не говорит вам, по какому индексу был вставлен элемент, вам придется снова искать элемент (чтобы уведомить адаптер ).

Есть ли рекомендуемый способ сделать это? Какой учебник я пропустил? В поисках я смог найти только решение notifyDatasetChanged().

1 Ответ

0 голосов
/ 17 мая 2019

Я считаю, что вы ищете DiffUtil. Вот хорошо объясненная Средняя статья , объясняющая его использование.

Другим интересным ответом, с которым я столкнулся при рассмотрении этого вопроса, является SO Answer , предоставленный Xaver Kapeller (просто найдите SortedListAdapter на странице, хотя его ответ очень хорош для чтения imo). Его библиотека SortedListAdapter делает код намного проще и понятнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...