【不再维护,如有bug、需求,请自行clone源码修改】
Ссылки на документацию:
Последняя версия: здесь.
С версии 1.4.5 публикация происходит в MavenCentral, способ использования изменился!
#last-version — см. ссылку на последнюю версию выше
# Только поддержка AndroidX
# С версии 1.4.5 GroupId и ArtifactId были обновлены, используйте следующий способ:
implementation "com.lwkandroid.library:rcvadapter:last-version"
— Быстрое создание адаптера с поддержкой различных режимов ViewType. — Поддержка добавления HeaderView, FooterView и EmptyView. — Возможность загрузки дополнительных данных при достижении конца списка. — Анимация для каждого элемента списка. — Поддержка вложенных секций (версия 1.1.0). — Поддержка плавающих меток StickyLayout (версия 1.2.0).
Изображение |
---|
![]() |
![]() |
![]() |
![]() |
![]() |
Если все элементы списка имеют одинаковый стиль, просто наследуйте класс RcvSingleAdapter<T>
. Пример:
public class TestSingleAdapter extends RcvSingleAdapter<TestData>
{
public TestSingleAdapter(Context context, List<TestData> datas)
{
super(context, android.R.layout.simple_list_item_1, datas);
}
@Override
public void onBindView(RcvHolder holder, TestData itemData, int position)
{
// Здесь связываем UI и данные. В классе RcvHolder есть методы для быстрой установки данных. Подробнее смотрите в исходном коде.
holder.setTvText(android.R.id.text1, itemData.getContent());
}
}
Если элементы списка имеют разные стили, то есть существует несколько типов ViewType, необходимо реализовать каждый тип отдельно и связать их с классом RcvMultiAdapter<T>
. Пример:
// Шаг 1: Каждый элемент наследует класс RcvBaseItemView<T>.
public class LeftItemView extends RcvBaseItemView<TestData>
{
@Override
public int getItemViewLayoutId()
{
// Возвращаем здесь идентификатор макета для этого элемента.
return R.layout.layout_item_left;
}
@Override
public boolean isForViewType(TestData item, int position)
{
// Определяем, когда использовать этот элемент.
return position % 2 == 0;
}
@Override
public void onBindView(RcvHolder holder, TestData testData, int position)
{
// Связываем здесь UI и данные. Класс RcvHolder предоставляет методы для быстрой настройки данных. Смотрите исходный код для деталей.
holder.setTvText(R.id.tv_left, testData.getContent());
}
}
// Шаг 2: Связываем все элементы с адаптером.
public class TestMultiAdapter extends RcvMultiAdapter<TestData>
{
public TestMultiAdapter(Context context, List<TestData> datas)
{
super(context, datas);
// Просто добавляем все элементы в адаптер. Независимо от количества типов ViewType всё легко настраивается.
addItemView(new LeftItemView());
addItemView(new RightItemView());
}
}
Добавление HeaderView, FooterView или EmptyView: после установки LayoutManager вызовите соответствующие методы.
// Сначала установите LayoutManager.
mRecyclerView.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false));
// Добавляем HeaderView (несколько элементов).
mAdapter.addHeaderView(headerView01, headerView02, headerView03...);
// Добавляем FooterView (несколько элементов).
mAdapter.addFooterView(footerView01, footerView02, footerView03...);
// Добавляем EmptyView (можно установить только один).
// После установки EmptyView он будет отображаться, если список пуст.
mAdapter.setEmptyView(emptyView);
или
mAdapter.setEmptyView(layoutId);
Автозагрузка новых данных при достижении конца списка: начиная с версии 1.4.3, был удалён предыдущий способ вызова.
Пример кода:
// Можно сначала настроить стиль загрузки, унаследовав класс RcvBaseLoadMoreView для создания пользовательского стиля.
// Если не настроено, будет использоваться стиль по умолчанию, см. исходный код класса RcvDefLoadMoreView.
RcvDefLoadMoreView loadMoreView = new RcvDefLoadMoreView.Builder()
.setBgColor(Color.GREEN)
.setTextColor(Color.RED)
.build(this);
mAdapter.setLoadMoreLayout(loadMoreView);
// Затем включаем и устанавливаем прослушиватель.
mAdapter.enableLoadMore(true);
mAdapter.setOnLoadMoreListener(RcvLoadMoreListener listener);
// Запретить загрузку дополнительных данных, обычно используется при сочетании с процессом обновления списка снизу.
mAdapter.enableLoadMore(false);
Примечание:
RcvDefLoadMoreView
.RcvBaseLoadMoreView
, переписав реализацию UI для каждого состояния. Не нужно беспокоиться о переключении состояний, можно посмотреть, как это реализовано в RcvDefLoadMoreView
внутри. mAdapter.enableItemShowingAnim(true);
// Использование пользовательской анимации mAdapter.enableItemShowingAnim(true, ? extends RcvBaseAnimation);
Примечание:
RcvAlphaInAnim
.RcvBaseAnimation
, можно обратиться к внутренней реализации RcvAlphaInAnim
для справки.6. Настройка прослушивателя кликов по элементам:
// Настройка OnItemClickListener
mAdapter.setOnItemClickListener(new RcvItemViewClickListener<TestData>()
{
@Override
public void onItemViewClicked(RcvHolder holder, TestData testData, int position)
{
//onClick обратный вызов
}
});
// Настройка OnItemLongClickListener
mAdapter.setOnItemLongClickListener(new RcvItemViewLongClickListener<TestData>()
{
@Override
public void onItemViewLongClicked(RcvHolder holder, TestData testData, int position)
{
//onLongClick обратный вызов
}
});
7. Добавление разделительных линий, прямой код:
1.2.9 версия была переписана для разделительных линий. Существующие методы не изменились, добавлены поддержка пользовательских цветов и быстрые методы создания:
# Подходит для LinearLayoutManager
// Создание вертикальной разделительной линии по умолчанию
RcvLinearDecoration.createDefaultVertical(Context context);
// Создание пользовательской вертикальной разделительной линии с цветом по умолчанию
RcvLinearDecoration.createDefaultVertical(int color);
// Создание горизонтальной разделительной линии по умолчанию
RcvLinearDecoration.createDefaultHorizontal(Context context);
// Создание пользовательской горизонтальной разделительной линии с цветом по умолчанию
RcvLinearDecoration.createDefaultHorizontal(int color);
// Конструктор: разделительная линия по умолчанию с Drawable
new RcvLinearDecoration(Context context, int orientation);
// Конструктор: пользовательская разделительная линия с Drawable
new RcvLinearDecoration(Context context, Drawable drawable, int orientation);
// Конструктор: пользовательская разделительная линия с Drawable
new RcvLinearDecoration(Context context, @DrawableRes int drawableResId, int orientation);
// Конструктор: пользовательская цветная разделительная линия (ширина или высота по умолчанию 1px)
new RcvLinearDecoration(@ColorInt int color, int orientation);
// Конструктор: пользовательская цветная разделительная линия
new RcvLinearDecoration(@ColorInt int color, int size, int orientation);
# Подходит для GridLayoutManager, StaggeredGridLayoutManager
// Создание разделительной линии по умолчанию
RcvGridDecoration.createDefault(Context context);
// Создание пользовательской цветной разделительной линии по умолчанию
RcvGridDecoration.createDefault(int color);
// Конструктор: разделительная линия по умолчанию с Drawable
new RcvGridDecoration(Context context);
// Конструктор: пользовательская разделительная линия с Drawable
new RcvGridDecoration(Context context, Drawable drawable);
// Конструктор: пользовательская разделительная линия с Drawable
new RcvGridDecoration(Context context, @DrawableRes int drawableResId);
// Конструктор: пользовательская цветная разделительная линия (по умолчанию ширина и высота 1px)
new RcvGridDecoration(@ColorInt int color);
// Конструктор: пользовательская цветная разделительная линия
new RcvGridDecoration(@ColorInt int color, int width, int height);
Примечание:
8. Вложенные секции, немного сложнее, объяснение с кодом:
Начиная с версии 1.4.0, предыдущие методы использования были удалены, используйте следующий метод:
Адаптер с функцией Section — это RcvSectionMultiLabelAdapter
и RcvSectionSingleLabelAdapter
, необходимо указать два универсальных типа, первый представляет Section
, второй представляет обычные данные Data
. Оба поддерживают различные типы данных дочерних макетов, единственное отличие состоит в том, что RcvSectionMultiLabelAdapter
также поддерживает различные типы дочерних макетов Section, но не может взаимодействовать с RcvStickyLayout
, в то время как RcvSectionSingleLabelAdapter
поддерживает только один тип дочернего макета Section, но может взаимодействовать с RcvStickyLayout
.Обратите внимание, что данные, передаваемые адаптеру, должны быть предварительно обработаны самостоятельно, и их необходимо обернуть с помощью RcvSectionWrapper
, прежде чем их можно будет передать адаптеру.
# Только один тип Section, совместимый с различными типами Data
public class TestSectionAdapter extends RcvSectionSingleLabelAdapter<TestSection, TestData>
{
public TestSectionAdapter(Context context, List<RcvSectionWrapper<TestSection, TestData>> datas)
{
super(context, datas);
}
@Override
protected RcvBaseItemView<RcvSectionWrapper<TestSection, TestData>>[] createDataItemViews()
{
return new RcvBaseItemView[]{new DataItemView01(), new DataItemView02()};
}
@Override
public int getSectionLabelLayoutId()
{
return R.layout.layout_section_label;
}
@Override
public void onBindSectionLabelView(RcvHolder holder, TestSection section, int position)
{
holder.setTvText(R.id.tv_section_label, section.getSection());
}
// Первый вид Data ItemView
private class DataItemView01 extends RcvBaseItemView<RcvSectionWrapper<TestSection, TestData>>
{
@Override
public int getItemViewLayoutId()
{
return R.layout.adapter_item_long;
}
@Override
public boolean isForViewType(RcvSectionWrapper<TestSection, TestData> item, int position)
{
return !item.isSection() && item.getData().getType() == 0;
}
``` **Примечание:**
1. В коллекцию данных, передаваемую адаптеру, необходимо оборачивать классы сущностей с помощью RcvSectionWrapper.
2. Нельзя передавать неправильные обобщённые типы для классов сущностей, которые предоставляют методы, доступные извне (например, прослушиватели кликов).
**9. Плавающий элемент StickyLayout**
В части адаптера не требуется вносить изменения, можно сразу использовать RcvSectionSingleLabelAdapter. В макете RecyclerView на том же уровне иерархии добавьте RcvStickyLayout и свяжите их в коде:
// xml-макет с добавлением RcvStickyLayout:
<android.support.v7.widget.RecyclerView
android:id="@+id/rcv_sticky"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<com.lwkandroid.rcvadapter.ui.RcvStickyLayout
android:id="@+id/stickyLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
// Связывание RecyclerView в коде RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rcv_sticky); /...пропуск настройки LayoutManager и адаптера для RecyclerView.../ RcvStickyLayout stickyLayout = (RcvStickyLayout) findViewById(R.id.stickyLayout); stickyLayout.attachToRecyclerView(recyclerView);
Это основные способы использования большинства базовых функций. Для получения дополнительной информации обратитесь к исходному коду.
### Конфигурация запутывания
-dontwarn com.lwkandroid.rcvadapter.** -keep class com.lwkandroid.rcvadapter.**{*;}
### Реализуемые функции
— На данный момент не определены.
### Открытые источники
1. https://github.com/hongyangAndroid/baseAdapter
2. https://github.com/CymChad/BaseRecyclerViewAdapterHelper
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )