У каждой розы свои шипы

Бесспорно, что RecyclerView является совершенно новым виджетом и имеет некоторые недостатки, которые необходимо устранить в краткосрочной / среднесрочной перспективе, скорее всего, в виде новых библиотек с открытым исходным кодом.

Множественный выбор

Одним из этих недостатков является шаблон пользовательского интерфейса с одним или несколькими вариантами выбора. Эта функция подробно описана в ListViews, но ViewHolder не включает никаких инструментов для реализации выбора.

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

К счастью для нас, Билл Филлипс с ранчо Big Nerd Ranch нашел хороший обходной путь, чтобы заставить работать множественный выбор. Его решение можно найти здесь.

Связанное сообщение: Хорошие, плохие и уродливые вещи о новом RecyclerView

Верхние и нижние колонтитулы

Было бы неплохо иметь встроенную поддержку верхних и нижних колонтитулов в RecyclerView. Однако здесь мы сталкиваемся с другим вариантом использования, в котором нам нужно полагаться на сторонние библиотеки для достижения этой цели.

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

Будьте осторожны при доступе к пользовательскому интерфейсу из фонового потока

Это не эксклюзивная характеристика RecyclerView, но я думаю, что важно упомянуть об этом, потому что это очень распространенная ошибка.

В Android вы не можете получить доступ к пользовательскому интерфейсу из фонового потока. Это может быть проблемой при попытке обновить адаптер с помощью обратного вызова (например, при попытке уведомить адаптер об изменениях в наборе данных после получения данных из Интернета).

Если вы обнаружите следующее исключение:

java.lang.IllegalStateException: нельзя вызвать этот метод, пока RecyclerView вычисляет макет или прокручивает

Вероятно, это происходит из-за того, что вы вызываете notifyItemInserted (position);, notifyItemChanged (position) или notifyItemRemoved (position); из фонового потока (или из обратного вызова, который выполняется в фоновом потоке).

Чтобы решить эту проблему, используйте обработчик:

По теме: Сэр, вот вам созданный вручную RecyclerView

Заключение и комментарии

У RecyclerView более чем многообещающее будущее. Его выдающаяся гибкость и возможности настройки предоставляют разработчикам Android несколько невероятно интересных сценариев.

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

Поскольку этот новый виджет официально разработан и поддерживается Google и, похоже, станет новым «лучшим подходом» для представления больших разнородных наборов данных, я настоятельно рекомендую вам как можно скорее начать тестирование RecyclerView.

Тем не менее, если вы думаете о внедрении этого виджета в коммерческое приложение, я бы посоветовал вам дважды подумать, поскольку нехватка ресурсов для RecyclerView может значительно увеличить время кодирования, необходимое для его правильной работы. Такая ситуация возникает каждый раз, когда на рынке появляется новая технология, и, скорее всего, она изменится, когда RecyclerView станет популярным среди разработчиков и будут выпущены новые библиотеки и документы.

Что бы вы ни решили, я желаю вам удачи в вашем следующем проекте!

Автор: Хуан Игнасио Молина ([email protected])

www.wolox.com.ar