Как я могу применить шаблон ViewHolder к ChipGroup

У меня есть RecyclerView и каждый элемент списка имеет ChipGroup в этом. Я хочу надуть Chips из XML и добавить их в ChipGroup, Каждый элемент списка имеет от 1 до 4 фишек. Если мой RecyclerView имеет 50 предметов, ChipS раздувают от 50 до 200 раз. Благодаря шаблону ViewHolder, RecyclerView предметы раздуваются только один раз. Должно быть возможно снизить уровень инфляции до максимум 50 для Chips. Как я могу применить то же самое ViewHolder шаблон для Chips?

2 ответа

Если каждый элемент в RecyclerView имеет 1-4 фишки, я думаю, что было бы разумно просто всегда раздувать четыре фишки, но динамически показывать / скрывать их, когда вы связываете ViewHolder, Если у вас огромное количество фишек, эта стратегия может быть не идеальной, но для четырех она должна подойти.

Если я правильно понял, вас беспокоит производительность RecyclerView. Вы не показываете свой код и не предоставляете снимки экрана, поэтому я предполагаю, что у вас на экране от 5 до 8 элементов, и всего 50 из них. Как всем известно, RecyclerView, представленный Google, делает именно это - решает проблемы с производительностью больших списков. Когда элемент больше не отображается на экране, убедитесь, что RecyclerView... перерабатывает его (читай: удаляет его из памяти). Так что в вашем случае всего от 5 до 24 фишек на экран - не такая уж и большая проблема. И ИМХО, нет лучшего способа справиться с инфляцией и переработкой представлений лучше, чем это делает RecyclerView. Ребята из Google сделали его очень надежным и умным.

Шаблон ViewHolder повторно использует каждое представление, объявленное в ViewGroup. Вы добавляете Chips динамически в свою ChipGroup (и, следовательно, в ViewGroup) для каждого элемента; RecyclerView не может узнать, какие фишки вы хотите использовать повторно.

Вы можете создать 50 чипов-заполнителей в макете ChipGroup в XML, а затем динамически обновлять / показывать / скрывать их, но это не очень элегантное решение.

Другие вопросы по тегам