不得不吐槽一下产品. 尼玛为啥要搞这样的功能.... 搞个两级的不就行了嘛...自带控件,多好. 三级,四级,据说还有六级的.... 这样丧心病狂的设计,后台也很差给数据吧.java
因为迭代了不少版本,老的文章内容已经不适用,更新一下.git
如下实现都只用一个RecycerView,没有嵌套.github
//根据item的状态展现,可折叠
TreeRecyclerAdapter treeRecyclerAdapter = new TreeRecyclerAdapter(TreeRecyclerType.SHOW_EXPAND);
复制代码
public TreeRecyclerAdapter() {
this(null);
}
public TreeRecyclerAdapter(TreeRecyclerType treeRecyclerType) {
type = treeRecyclerType == null ? TreeRecyclerType.SHOW_DEFAULT : treeRecyclerType;
}
复制代码
构造函数传入,不传默认则使用SHOW_DEFAULT.bash
注意! 使用这个,没有写ViewHolder的概念,只有TreeItem和TreeItemGroup
ide
/**
* 城市
*/
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
//这个item的具体展现layout
@Override
public int getLayoutId() {
return R.layout.item_three;
}
//这个Item条目的视图绑定操做,
@Override
public void onBindViewHolder(@NonNull ViewHolder holder) {
holder.setText(R.id.tv_content, data.getAreaName());
}
//这个Item,在RecyclerView的每行所占比,只有RecyclerView设置了GridLayoutManager才会生效.
//这个最好是返回能整出的数.之因此用除法,是为了能够作到,只改变GridLayoutManager的总数,无需改变Item
@Override
public int getSpanSize(int maxSpan) {
return maxSpan / 6;
}
}
复制代码
第一级为啥没写呢? 由于写法和第二级同样的,就不写出来了.具体见demo
函数
有两种方法:ui
@TreeDataType(iClass = AreaItem.class)
public class AreasBean{
...
}
复制代码
而后重写在TreeItemGroup中initChildList()
this
@Override
public List<TreeItem> initChildList(ProvinceBean.CityBean data) {
return ItemHelperFactory.createItems(data.getAreas(), this);
}
复制代码
这样,item就生成了.spa
//建立item
List<TreeItem> provinceItemList = ItemHelperFactory.createItems(cityBeen, ProvinceItemParent.class, null);
List<TreeItem> items = ItemHelperFactory.createItems(cityBeen, null);
复制代码
这2行代码,效果上是同样的.设计
1.重写TreeItem
的onClick()
:
adapter
设置
setOnItemClickListener
adapter.setOnItemClickListener(new BaseRecyclerAdapter.OnItemClickListener() {
@Override
public void onItemClick(@NonNull ViewHolder viewHolder, int position) {
}
});
复制代码
注意.两者冲突
您的喜欢与回复是我最大的动力,欢迎评论补充.