MCPcopy Index your code
hub / github.com/Jlanglang/TreeRecyclerView

github.com/Jlanglang/TreeRecyclerView @1.3.1.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release 1.3.1.1 ↗ · + Follow
685 symbols 1,555 edges 71 files 117 documented · 17%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

TreeRecyclerView

996.icu

996.icu

LICENSE

示例图:

image image image image image image

以上示例都只使用了一个RecyclerView,没有嵌套

依赖方式

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

根build.gradle里面添加

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

如何使用:

一.你需要创建一个adapter:

 //可折叠
 TreeRecyclerAdapter treeRecyclerAdapter = new TreeRecyclerAdapter(TreeRecyclerType.SHOW_EXPAND);

二.你需要选择一种展开方式

public enum TreeRecyclerType {
    /**
     * 显示所有,不可展开折叠
     * 适用场景,不需要折叠,默认显示所有item
     */
    SHOW_ALL,

    /**
     * 根据isExpand的状态显示展开与折叠,
     * 适用场景,多级的data数据展示,保存展开状态
     */
    SHOW_EXPAND,

    /**
     * 默认只显示第一级,点击展开,折叠不会影响子级展开折叠
     * 适用场景,一级一级展开,保存展开状态
     */
    SHOW_DEFAULT
}

构造函数传入,不传默认则使用SHOW_DEFAULT.

三.怎么写Item

注意! 使用这个,没有写ViewHolder的概念,只有TreeItemTreeItemGroup.子级和父级.

父级示例:

/**
* 城市
 */
public class CountyItemParent extends TreeItemGroup<ProvinceBean.CityBean> {//泛型代表绑定的javabean

    //创建子TreeItem.
    @Override
    public List<TreeItem> initChildList(ProvinceBean.CityBean data) {
        return ItemHelperFactory.createItems(data.getAreas(),  this);
    }

    //该级具体展示的Layout
    @Override
    public int getLayoutId() {
        return R.layout.item_two;
    }

    //view和data绑定
    @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());
    }
    //这个Item,在RecyclerView的每行所占比,只有RecyclerView设置了GridLayoutManager才会生效.
    //这里之所以用除法,是为了可以做到,只改变GridLayoutManager的总数,无需改变每个Item,当然也可以直接返回一个int值.
    @Override
    public int getSpanSize(int maxSpan) {
        return maxSpan / 6;
    }
}

怎么创建Item:

有两种方法:

第一种:

在javabean上使用注解,

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

然后传入bean对象

 ItemHelperFactory.createItems(list,  treeItemGroup);

第二种:

直接传入bean对象和item的class,

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

四.如何更新adapter:

增删该查都有.

treeRecyclerAdapter.getItemManager().replaceAllItem(items);// 替换全部Item
treeRecyclerAdapter.getItemManager().addItems(items);// 添加一组Item
treeRecyclerAdapter.getItemManager().removeItems(items);// 添加一组Item

在item里面也是可以更新的:

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

五,如何设置Item点击:

1.重写TreeItemonClick()

2.adapter设置setOnItemClickListener

 adapter.setOnItemClickListener(new BaseRecyclerAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(@NonNull ViewHolder viewHolder, int position) {

            }
        });
注意.二者冲突.

ItemClickListener优先级高于TreeItemonClick.

如果不想写上面的Item类怎么办?

使用SimpleTreeItem

 ArrayList<TreeItem> items = new ArrayList<>();
        for (Pair itemPair : itemPairs) {
            SimpleTreeItem simpleTreeItem = new SimpleTreeItem(R.layout.item_mine)//传入布局id.
                    .onItemBind(viewHolder -> {

                    })
                    .onItemClick(viewHolder -> {

                    });
            simpleTreeItem.setData(itemPair);
            items.add(simpleTreeItem);
        }
 adapter.getItemManager().replaceAllItem(items);

最后

直接设置就行了.adapter可以不先setData 可以直接setAdapter.然后adapter.getItemManager().replaceAllItem(items);

 recyclerView.setAdapter(adapter);

更多效果.见demo.哈哈

欢迎大家留言,提出问题. QQ交流群:493180098

Extension points exported contracts — how you extend this code

CheckItemInterface (Interface)
检查item属性 [3 implementers]
app/src/main/java/com/baozi/treerecyclerview/manager/ItemManager.java
OnIndexChangedListener (Interface)
(no doc) [1 implementers]
demo/src/main/java/com/baozi/demo/item/sort/IndexBar.java
SwipeItem (Interface)
Created by Administrator on 2017/8/18 0018. 实现该接口,侧滑删除 [2 implementers]
app/src/main/java/com/baozi/treerecyclerview/item/SwipeItem.java
OnLayout (Interface)
OnLayoutChangeListener added in API 11. I need to support it from API 8. [2 implementers]
app/src/main/java/com/baozi/treerecyclerview/widget/swipe/SwipeLayout.java
SwipeItemMangerInterface (Interface)
(no doc) [2 implementers]
app/src/main/java/com/baozi/treerecyclerview/widget/swipe/SwipeItemMangerInterface.java
SwipeListener (Interface)
(no doc) [1 implementers]
app/src/main/java/com/baozi/treerecyclerview/widget/swipe/SwipeLayout.java

Core symbols most depended-on inside this repo

getView
called by 30
app/src/main/java/com/baozi/treerecyclerview/base/ViewHolder.java
getSurfaceView
called by 24
app/src/main/java/com/baozi/treerecyclerview/widget/swipe/SwipeLayout.java
getItemManager
called by 18
app/src/main/java/com/baozi/treerecyclerview/item/TreeItem.java
setText
called by 18
app/src/main/java/com/baozi/treerecyclerview/base/ViewHolder.java
createItems
called by 13
app/src/main/java/com/baozi/treerecyclerview/factory/ItemHelperFactory.java
getData
called by 13
app/src/main/java/com/baozi/treerecyclerview/adpater/wrapper/BaseWrapper.java
getOpenStatus
called by 13
app/src/main/java/com/baozi/treerecyclerview/widget/swipe/SwipeLayout.java
getAdapter
called by 13
app/src/main/java/com/baozi/treerecyclerview/manager/ItemManager.java

Shape

Method 582
Class 79
Interface 16
Enum 8

Languages

Java100%

Modules by API surface

app/src/main/java/com/baozi/treerecyclerview/widget/swipe/SwipeLayout.java111 symbols
app/src/main/java/com/baozi/treerecyclerview/adpater/wrapper/SwipeWrapper.java38 symbols
app/src/main/java/com/baozi/treerecyclerview/adpater/wrapper/TreeLoadWrapper.java33 symbols
app/src/main/java/com/baozi/treerecyclerview/adpater/wrapper/LoadingWrapper.java31 symbols
app/src/main/java/com/baozi/treerecyclerview/widget/TreeSortAdapter.java28 symbols
app/src/main/java/com/baozi/treerecyclerview/base/ViewHolder.java26 symbols
app/src/main/java/com/baozi/treerecyclerview/adpater/TreeRecyclerAdapter.java26 symbols
app/src/main/java/com/baozi/treerecyclerview/manager/ItemManager.java23 symbols
app/src/main/java/com/baozi/treerecyclerview/base/BaseRecyclerAdapter.java22 symbols
app/src/main/java/com/baozi/treerecyclerview/adpater/wrapper/BaseWrapper.java19 symbols
app/src/main/java/com/baozi/treerecyclerview/widget/DragSelectRecyclerAdapter.java18 symbols
app/src/main/java/com/baozi/treerecyclerview/widget/DragSelectRecyclerView.java15 symbols

For agents

$ claude mcp add TreeRecyclerView \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page