1.优化了获取注解的逻辑,减少了读取class的注解的次数
2.ItemManager新增了setTag.getTag方法,可以通过该方法绑定Activity或者Fragment等对象.在TreeItem可以获取该对象
3.TreeItem新增了init方法,可以做一些初始化设置,比如默认是否展开等等
4.新增了getItemOffsets的重写函数,与ItemDecoration接口保持一致(旧的方法依旧保留)
新增androidx分支.转换支持androidX 版本号:v1.3.1-androidx
新增Kotlin版本分支. 版本号v1.3.1-kt
1.支持实现树形结构列表及大部分列表样式
2.每一种条目的逻辑独立,充分解耦,支持复用
3.支持组件化
4.支持服务器动态下发,动态组合
5.侵入性低,不修改RecyclerView原有特性
implementation 'com.github.Jlanglang:TreeRecyclerView:1.3.1.1'
根build.gradle里面添加
repositories {
maven { url 'https://jitpack.io' }
}
//可折叠
TreeRecyclerAdapter treeRecyclerAdapter = new TreeRecyclerAdapter(TreeRecyclerType.SHOW_EXPAND);
public enum TreeRecyclerType {
/**
* 显示所有,不可展开折叠
* 适用场景,不需要折叠,默认显示所有item
*/
SHOW_ALL,
/**
* 根据isExpand的状态显示展开与折叠,
* 适用场景,多级的data数据展示,保存展开状态
*/
SHOW_EXPAND,
/**
* 默认只显示第一级,点击展开,折叠不会影响子级展开折叠
* 适用场景,一级一级展开,保存展开状态
*/
SHOW_DEFAULT
}
构造函数传入,不传默认则使用SHOW_DEFAULT
.
注意! 使用这个,没有写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);
}
//该级具体展示的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;
}
}
有两种方法:
在javabean上使用注解,
@TreeDataType(iClass = AreaItem.class)
public class AreasBean{
...
}
然后传入bean对象
ItemHelperFactory.createItems(list, treeItemGroup);
直接传入bean对象和item的class,
ItemHelperFactory.createItems(list, Item.class, treeItemGroup);
增删该查都有.
treeRecyclerAdapter.getItemManager().replaceAllItem(items);// 替换全部Item
treeRecyclerAdapter.getItemManager().addItems(items);// 添加一组Item
treeRecyclerAdapter.getItemManager().removeItems(items);// 添加一组Item
@Override
public void onClick(ViewHolder viewHolder) {
super.onClick(viewHolder);
getItemManager().notifyDataChanged();
}
1.重写TreeItem
的onClick()
2.adapter
设置setOnItemClickListener
adapter.setOnItemClickListener(new BaseRecyclerAdapter.OnItemClickListener() {
@Override
public void onItemClick(@NonNull ViewHolder viewHolder, int position) {
}
});
ItemClickListener
优先级高于TreeItem
的onClick
.
使用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);
-keep public class * extends com.baozi.treerecyclerview.item.TreeItem {}
-keep public class * extends android.support.annotation.**
直接设置就行了.adapter可以不先setData
可以直接setAdapter.然后adapter.getItemManager().replaceAllItem(items);
recyclerView.setAdapter(adapter);
更多效果.见demo