#kotlin #recyclerview
При написании стандартных адаптеров в
RecyclerView, мы часто сталкиваемся с дублированием кода. Особенно это заметно при использовании разных ViewType. Думаю, что многим знаком подобный код:if (things.get(position) is Duck) {
return TYPE_DUCK
} else if (things.get(position) is Mouse) {
return TYPE_MOUSE
}То есть при добавлении нового элемента в список, нам нужно менять адаптер в нескольких местах.
Существует несколько способов улучшения работы с адаптерами:
1️⃣ Использование layout в качестве идентификатора. Стоит помнить, что layout — это уникальный int, который можно использовать в качестве идентификатора. В этой статье автор предлагает использовать
TypeFactory, где можно перечислить всю логику работы с идентификаторами для адаптера, и в случае добавления нового элемента – просто дописать строку в этой Factory. Хороший подход, который можно улучшить и использовать без добавления библиотек.2️⃣ Использование Delegate для описание логики ViewHolder. Второй подход схож с первым. Можно прописать всю логику для работы с ViewHolder в одном классе
Delegate. Потом просто регистрировать подходящие делегаты для нужного адаптера, не думая про имплементацию. Почитать подробнее про подход можно тут и уже есть библиотека, которую стоит изучить прежде чем затягивать к себе в проект.3️⃣ Использование библиотек. Во втором подходе уже был описан пример созданной библиотеки, но кроме неё есть ещё их огромное множество. На мой взгляд, удачная библиотека описана в этой статье и называется Kiel. При помощи Kotlin DSL наш адаптер становится компактным, а кроме этого мы можем использовать библиотеку как с Paging Library, так и с Diff Utils. Стоит обратить внимание и применить подобный подход для своих приложений, если вам нравится DSL.
А как вы улучшаете свои адаптеры?