1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/vanish136_admin-RecyclerViewAdapter

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 18 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 01.12.2024 16:52 376a74e

RecyclerViewAdapter

【不再维护,如有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).

Примеры изображений

Изображение

Использование

  1. Если все элементы списка имеют одинаковый стиль, просто наследуйте класс 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());
        }
    }
  2. Если элементы списка имеют разные стили, то есть существует несколько типов 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());
        }
    }
  3. Добавление 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);
  4. Автозагрузка новых данных при достижении конца списка: начиная с версии 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);

Примечание:

  1. Реализация по умолчанию — класс RcvAlphaInAnim.
  2. Для пользовательского стиля необходимо наследовать 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);

Примечание:

  1. Это напрямую устанавливается для RecyclerView, а не для адаптера, не путайте.
  2. Поддерживает пользовательские Drawable в качестве разделительных линий.

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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/vanish136_admin-RecyclerViewAdapter.git
git@api.gitlife.ru:oschina-mirror/vanish136_admin-RecyclerViewAdapter.git
oschina-mirror
vanish136_admin-RecyclerViewAdapter
vanish136_admin-RecyclerViewAdapter
master