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

OSCHINA-MIRROR/Jlanglang-TreeRecyclerView

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

2021-3-7更新

  1. Оптимизирована логика получения аннотаций, уменьшено количество чтений аннотаций класса.

  2. В ItemManager добавлены методы setTag и getTag для привязки объектов Activity или Fragment. TreeItem может получить доступ к этому объекту.

  3. В TreeItem добавлен метод init для выполнения некоторых настроек инициализации, таких как по умолчанию развёрнутое состояние и т. д.

  4. Добавлена переписанная функция getItemOffsets, которая соответствует интерфейсу ItemDecoration (старый метод всё ещё сохраняется).

Обновление

Добавлена ветка androidx. Поддержка androidX. Версия: v1.3.1-androidx.

Добавлена версия Kotlin. Версия: v1.3.1-kt.

996.icu LICENSE

Особенности

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

Пример изображения:

image image image image image image Все примеры используют только один RecyclerView, без вложенности.

Способ зависимости

implementation 'com.github.Jlanglang:TreeRecyclerView:1.3.1.1'

В корне build.gradle добавьте:

repositories {
    maven { url 'https://jitpack.io' }
}

Как использовать:

1. Вам нужно создать адаптер:

// Можно свернуть
TreeRecyclerAdapter treeRecyclerAdapter = new TreeRecyclerAdapter(TreeRecyclerType.SHOW_EXPAND);

2. Вам необходимо выбрать способ расширения:

public enum TreeRecyclerType {
/**
 * Показать все, нельзя развернуть или свернуть
 * Подходит для сценариев, где не требуется сворачивание, по умолчанию отображаются все элементы
 */
SHOW_ALL,

/**
 * Отображение в соответствии со статусом isExpand, развёрнутое или свёрнутое
 * Подходит для сценариев многоуровневого отображения данных, сохранение состояния развёртывания
 */
SHOW_EXPAND,

/**
 * По умолчанию отображается только первый уровень, при нажатии на развёртывание, свёртывание не влияет на состояние развёртывания подэлементов
 * Подходит для сценария, когда уровни разворачиваются один за другим, сохраняя состояние развёртывания
*/
SHOW_DEFAULT
}

Конструктор передаётся, если не передан, используется SHOW_DEFAULT по умолчанию.

3. Как написать элемент

Обратите внимание! В этом случае нет концепции написания ViewHolder, есть только TreeItem и TreeItemGroup. Подэлементы и родительские элементы.

Родительский пример:

/**
* Город
 */
public class CountyItemParent extends TreeItemGroup<ProvinceBean.CityBean> {// Универсальный тип представляет связанный javabean

    // Создание дочернего TreeItem.
    @Override
    public List<TreeItem> initChildList(ProvinceBean.CityBean data) {
        return ItemHelperFactory.createItems(data.getAreas(),  this);
    }

    // Конкретный макет этого уровня
    @Override
    public int getLayoutId() {
        return R.layout.item_two;
    }

    // Связывание представления и данных
    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder) {
        holder.setText(R.id.tv_content, data.getCityName());
    }
}

Пример подэлемента:

/**
* Округ
 */
public class AreaItem extends TreeItem<ProvinceBean.CityBean.AreasBean> {// Универсальный тип представляет связанный javabean

    @Override
    public int getLayoutId() {
        return R.layout.item_three;
    }
    // Операция привязки,
    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder) {
        holder.setText(R.id.tv_content, data.getAreaName());
    }
    // Этот элемент, в каждой строке RecyclerView занимает долю, только если RecyclerView установлен GridLayoutManager, он будет иметь эффект.
    // Здесь причина использования деления заключается в том, что можно достичь цели изменения только общего числа GridLayoutManager без изменения каждого элемента, конечно, вы также можете напрямую вернуть значение int.
    @Override
    public int getSpanSize(int maxSpan) {
        return maxSpan / 6;
    }
}

Как создать элемент:

Есть два способа:

Первый способ:

Используйте аннотации в javabean,

 @TreeDataType(iClass = AreaItem.class)
  public class AreasBean{
  ...
  }

Затем передайте объект bean

 ItemHelperFactory.createItems(list,  treeItemGroup);

Второй способ:

Передайте объект bean напрямую и класс элемента,

 ItemHelperFactory.createItems(list, Item.class, treeItemGroup);

4. Как обновить адаптер:

Добавить, удалить и изменить все данные.

treeRecyclerAdapter.getItemManager().replaceAllItem(items);// Заменить все элементы
treeRecyclerAdapter.getItemManager().addItems(items);// Добавить группу элементов
treeRecyclerAdapter.getItemManager().removeItems(items);// Удалить группу элементов

В элементе также можно обновить:

    @Override
    public void onClick(ViewHolder viewHolder) {
        super.onClick(viewHolder);
        getItemManager().notifyDataChanged();
    }

5. Как установить щелчок по элементу:

  1. Перепишите метод onClick() в TreeItem.

  2. Установите setOnItemClickListener в адаптере.

 adapter.setOnItemClickListener(new **BaseRecyclerAdapter.OnItemClickListener()**  

@Override public void onItemClick(@NonNull ViewHolder viewHolder, int position) {

} });


**Внимание: два элемента конфликтуют.**  
`ItemClickListener` имеет более высокий приоритет, чем `onClick` у `TreeItem`.  

# Как быть, если вы не хотите создавать класс Item?  

Используйте `SimpleTreeItem`:  

ArrayList items = new ArrayList<>(); for (Pair itemPair : itemPairs) { SimpleTreeItem simpleTreeItem = new SimpleTreeItem(R.layout.item_mine)//передаём идентификатор макета. .onItemBind(viewHolder -> {

    })
    .onItemClick(viewHolder -> {

    });
simpleTreeItem.setData(itemPair);
items.add(simpleTreeItem);

} adapter.getItemManager().replaceAllItem(items);


**Скрытие информации:**  

-keep public class * extends com.baozi.treerecyclerview.item.TreeItem {} -keep public class * extends android.support.annotation.**


**Наконец:**  

Можно сразу установить адаптер. Необязательно сначала вызывать setData. Можно сразу вызвать setAdapter, а затем `adapter.getItemManager().replaceAllItem(items);`  

recyclerView.setAdapter(adapter);


Больше эффектов можно увидеть в демонстрационной версии.  

### Приглашаем всех к обсуждению и вопросам. Группа для общения в QQ: 493180098.

Комментарии ( 0 )

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

Введение

Рекурсивный `RecyclerView` в виде дерева. Расширить Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://gitlife.ru/oschina-mirror/Jlanglang-TreeRecyclerView.git
git@gitlife.ru:oschina-mirror/Jlanglang-TreeRecyclerView.git
oschina-mirror
Jlanglang-TreeRecyclerView
Jlanglang-TreeRecyclerView
master