Как стать автором
Обновить

Комментарии 15

Спасибо, очень познавательно. Я совсем недавно узнал про ViewHolder, думал переделывать все адаптеры на него, а тут уже и готовую реализацию представили.
Не совсем понял про LinearLayoutManager. Из названия следует, что он работает только с LinearLayout? Хотя казалось бы, причем тут вообще разница в лейаутах. Или сам ListView должен быть внутри Linearlayout?
Не уверен, но кажется, что LinearLayoutManager так назвали, потому что он предоставляет возможность отображать только линейный вертикальный или горизонтальный список элементов. Видимо, подразумевается, что с другими LayoutManager'ами список сможет иметь какую-нибудь более причудливую форму.
То есть слова в названии нужно группировать скорее так Linear(LayoutManager), чем так (LinearLayout)Manager.
Это было бы очень глупо, ибо LinearLayout вполне себе отдельный элемент и людей это смутит. К тому же ListView только вертикально элементы может отображать.
Круто, до этого мне для проекта приходилось писать свою версию ListView, чтобы сделать все те анимации, которые были нужны (в частности для многоуровневого раскрывающегося списка — стандартный не поддерживает необходимую глубину, на видео уровня всего два, потому что просто не нашел сейчас, где было больше) — а добавлять анимацию в стандартном ListView — боль… Давно этот виджет надо было обновить, молодцы.

А теперь попробуйте реализовать кастомный LayoutManager для RecyclerView (то, собственно, ради чего все это заваривалось).
Для примера — wiresareobsolete.com/2014/09/building-a-recyclerview-layoutmanager-part-1/ и wiresareobsolete.com/2014/09/recyclerview-layoutmanager-2/
Так, чтобы оценить масштаб задачи и объем ручной работы.
Не занимаюсь разработкой под android, но по мне в приведенных в ссылках примерах кода довольно мало для нестандартного use case.
По ссылкам, как раз чтобы не приводить всю простыню кода, оставлены только важные для понимания куски. Весь код лежит в этом репозитории: github.com/devunwired/recyclerview-playground
Но эти библиотеки автоматически меняют minSdk нашей сборки на версию L

Почему? Ведь в их названии есть v7. К тому же, вот что написано здесь
The RecyclerView and CardView widgets are included in the Android L Developer Preview Support Library, so they are available in earlier versions of Android with these limitations:

CardView falls back to a programmatic shadow implementation using additional padding.
CardView does not clip its children views that intersect with rounded corners.
Да, мне тоже это кажется странным, но если не прописать <uses-sdk tools:node=«replace» />, то Gradle, насколько я понимаю, при мержинге манифестов выставит максимальный minSdk, а он у этих библиотек почему-то соответствует версии L.
Вот здесь это подробнее описано http://www.reddit.com/r/androiddev/comments/297xli/howto_use_the_v21_support_libs_on_older_versions/
People need to realize the reason it's platform restricted right now is because it's all still very much a WIP and will change between now and release. This is restricted to unreleased software because it's not intended to be used in production apps until it's ready.

Видимо, разработчики Android таким образом решили намекнуть, что использовать эти библиотеки до релиза можно только на свой страх и риск.
Понятно, спасибо за объяснение.
Как в RecyclerView понять, что скролл достиг конца, чтобы загрузить еще данных? В ListView я делал так:

public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
    boolean loadMore = firstVisibleItem + visibleItemCount >= totalItemCount;
    if (loadMore && !getLoaderManager().hasRunningLoaders()) {
        getLoaderManager().restartLoader(LOADER_ID);
    }
}
Если при использовании ListView можно было из-за отсутствия опыта использовать адаптер, создающий с нуля отдельное view для каждого элемента списка, что при большом размере списка могло обернуться меньшей отзывчивостью UI и использованием лишней памяти

Э… а при чем тут паттерн ViewHolder? Его единственная цель — не вызывать findViewById() слишком часто. Память и создание отдельного элемента списка для каждой вью тут ни при чем…
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации