这边建议使用
BaseRecyclerViewAdapterHelper
万能适配器在Recyclerview中显示
让你子对象和父对象分别继承
BaseNode和BaseExpandNode
这是BaseNode
abstract class BaseNode { /** * 重写此方法,获取子节点。如果没有子节点,返回 null 或者 空数组 * * 如果返回 null,则无法对子节点的数据进行新增和删除等操作 */ abstract val childNode: MutableList<BaseNode>? }
这是BaseExpandNode
abstract class BaseExpandNode : BaseNode() { var isExpanded: Boolean = true }
继承之后父对象复写其中方法比如
public class FiveNode extends BaseExpandNode { private List<BaseNode> childNode; private String title; private int id; private boolean hasChild; private String ip; private String type; public FiveNode(List<BaseNode> childNode, String title, int id,boolean hasChild,String ip,String type) { this.childNode = childNode; this.title = title; this.id = id; this.hasChild=hasChild; this.ip=ip; this.type=type; setExpanded(false); } public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getTitle() { return title; } public int getId() { return id; } public boolean isHasChild(){ return hasChild; } @Nullable @Override public List<BaseNode> getChildNode() { return childNode; } }
适配器继承
BaseNodeAdapter
public class TreeAdapter extends BaseNodeAdapter { private onItemClickListener onItemClickListener; public TreeAdapter() { super(); addNodeProvider(new FirstProvider()); } @Override protected int getItemType(@NotNull List<? extends BaseNode> list, int i) { BaseNode node = list.get(i); if (node instanceof FirstNode) { return 1; } return -1; } }
其中provider继承
BaseNodeProvider
public class FirstProvider extends BaseNodeProvider { @Override public int getItemViewType() { return 1; } @Override public int getLayoutId() { return R.layout.item_node_first; } @Override public void convert(@NotNull BaseViewHolder baseViewHolder, @Nullable BaseNode baseNode) { } @Override public void onClick(@NotNull BaseViewHolder helper, @NotNull View view, BaseNode data, int position) { getAdapter().expandOrCollapse(position); } }
效果图