Android项目开发过程中,经常会有多级列表的需求,今天分享一下简单好用的BaseNodeAdapter,利用此适配器可实现效果
先看一下最终效果
将此适配器集成至项目
1.在项目的根目录的build.gradle文件中配置远程仓库
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
2.在需要使用该功能的module中添加依赖,版本号可用(3.0.4)
dependencies {
compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:VERSION_CODE'
}
这样就集成完毕了,此框架不仅仅有折叠布局的功能,普通的线性列表布局也可用
使用
1.首先创建适配器的实体类(这是个五级的列表,可能代码有些长)
public class DeptListBean {
private String code;
private String msg;
private DataBean data;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public DataBean getData() {
return data;
}
public void setData(DataBean data) {
this.data = data;
}
public static class DataBean {
private List<ListBeanXXXX> list;
public List<ListBeanXXXX> getList() {
return list;
}
public void setList(List<ListBeanXXXX> list) {
this.list = list;
}
public static class ListBeanXXXX extends BaseExpandNode {
private String deptId;
private String deptName;
private String orgId;
private String precinctId;
private Object precinctName;
private String parentDeptId;
private Object parentDeptName;
private String remark;
private int status;
private Object createTime;
private Object createUserId;
private Object updateTime;
private Object updateUserId;
private List<ListBeanXXX> list;
public String getDeptId() {
return deptId;
}
public void setDeptId(String deptId) {
this.deptId = deptId;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
public String getOrgId() {
return orgId;
}
public void setOrgId(String orgId) {
this.orgId = orgId;
}
public String getPrecinctId() {
return precinctId;
}
public void setPrecinctId(String precinctId) {
this.precinctId = precinctId;
}
public Object getPrecinctName() {
return precinctName;
}
public void setPrecinctName(Object precinctName) {
this.precinctName = precinctName;
}
public String getParentDeptId() {
return parentDeptId;
}
public void setParentDeptId(String parentDeptId) {
this.parentDeptId = parentDeptId;
}
public Object getParentDeptName() {
return parentDeptName;
}
public void setParentDeptName(Object parentDeptName) {
this.parentDeptName = parentDeptName;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public Object getCreateTime() {
return createTime;
}
public void setCreateTime(Object createTime) {
this.createTime = createTime;
}
public Object getCreateUserId() {
return createUserId;
}
public void setCreateUserId(Object createUserId) {
this.createUserId = createUserId;
}
public Object getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Object updateTime) {
this.updateTime = updateTime;
}
public Object getUpdateUserId() {
return updateUserId;
}
public void setUpdateUserId(Object updateUserId) {
this.updateUserId = updateUserId;
}
public List<ListBeanXXX> getList() {
return list;
}
public void setList(List<ListBeanXXX> list) {
this.list = list;
}
private List<BaseNode> childNode;
public void addChildNode(BaseNode baseNode) {
if (baseNode == null) {
return;
}
if (childNode == null) {
childNode = new ArrayList<>();
}
childNode.add(baseNode);
}
@Nullable
@Override
public List<BaseNode> getChildNode() {
return childNode;
}
public static class ListBeanXXX extends BaseExpandNode {
private String deptId;
private String deptName;
private String orgId;
private String precinctId;
private Object precinctName;
private String parentDeptId;
private Object parentDeptName;
private Object remark;
private int status;
private Object createTime;
private Object createUserId;
private String updateTime;
private Object updateUserId;
private List<ListBeanXX> list;
public String getDeptId() {
return deptId;
}
public void setDeptId(String deptId) {
this.deptId = deptId;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
public String getOrgId() {
return orgId;
}
public void setOrgId(String orgId) {
this.orgId = orgId;
}
public String getPrecinctId() {
return precinctId;
}
public void setPrecinctId(String precinctId) {
this.precinctId = precinctId;
}
public Object getPrecinctName() {
return precinctName;
}
public void setPrecinctName(Object precinctName) {
this.precinctName = precinctName;
}
public String getParentDeptId() {
return parentDeptId;
}
public void setParentDeptId(String parentDeptId) {
this.parentDeptId = parentDeptId;
}
public Object getParentDeptName() {
return parentDeptName;
}
public void setParentDeptName(Object parentDeptName) {
this.parentDeptName = parentDeptName;
}
public Object getRemark() {
return remark;
}
public void setRemark(Object remark) {
this.remark = remark;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public Object getCreateTime() {
return createTime;
}
public void setCreateTime(Object createTime) {
this.createTime = createTime;
}
public Object getCreateUserId() {
return createUserId;
}
public void setCreateUserId(Object createUserId) {
this.createUserId = createUserId;
}
public String getUpdateTime() {
return updateTime;
}
public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
}
public Object getUpdateUserId() {
return updateUserId;
}
public void setUpdateUserId(Object updateUserId) {
this.updateUserId = updateUserId;
}
public List<ListBeanXX> getList() {
return list;
}
public void setList(List<ListBeanXX> list) {
this.list = list;
}
private List<BaseNode> childNode;
public void addChildNode(BaseNode baseNode) {
if (baseNode == null) {
return;
}
if (childNode == null) {
childNode = new ArrayList<>();
}
childNode.add(baseNode);
}
@Nullable
@Override
public List<BaseNode> getChildNode() {
return childNode;
}
public static class ListBeanXX extends BaseExpandNode {
private String deptId;
private String deptName;
private String orgId;
private String precinctId;
private Object precinctName;
private String parentDeptId;
private Object parentDeptName;
private String remark;
private int status;
private String createTime;
private String createUserId;
private String updateTime;
private String updateUserId;
private List<ListBeanX> list;
public String getDeptId() {
return deptId;
}
public void setDeptId(String deptId) {
this.deptId = deptId;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
public String getOrgId() {
return orgId;
}
public void setOrgId(String orgId) {
this.orgId = orgId;
}
public String getPrecinctId() {
return precinctId;
}
public void setPrecinctId(String precinctId) {
this.precinctId = precinctId;
}
public Object getPrecinctName() {
return precinctName;
}
public void setPrecinctName(Object precinctName) {
this.precinctName = precinctName;
}
public String getParentDeptId() {
return parentDeptId;
}
public void setParentDeptId(String parentDeptId) {
this.parentDeptId = parentDeptId;
}
public Object getParentDeptName() {
return parentDeptName;
}
public void setParentDeptName(Object parentDeptName) {
this.parentDeptName = parentDeptName;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getCreateUserId() {
return createUserId;
}
public void setCreateUserId(String createUserId) {
this.createUserId = createUserId;
}
public String getUpdateTime() {
return updateTime;
}
public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
}
public String getUpdateUserId() {
return updateUserId;
}
public void setUpdateUserId(String updateUserId) {
this.updateUserId = updateUserId;
}
public List<ListBeanX> getList() {
return list;
}
public void setList(List<ListBeanX> list) {
this.list = list;
}
private List<BaseNode> childNode;
public void addChildNode(BaseNode baseNode) {
if (baseNode == null) {
return;
}
if (childNode == null) {
childNode = new ArrayList<>();
}
childNode.add(baseNode);
}
@Nullable
@Override
public List<BaseNode> getChildNode() {
return childNode;
}
public static class ListBeanX extends BaseExpandNode {
private String deptId;
private String deptName;
private String orgId;
private String precinctId;
private Object precinctName;
private String parentDeptId;
private Object parentDeptName;
private String remark;
private int status;
private String createTime;
private String createUserId;
private String updateTime;
private String updateUserId;
private List<ListBean> list;
public String getDeptId() {
return deptId;
}
public void setDeptId(String deptId) {
this.deptId = deptId;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
public String getOrgId() {
return orgId;
}
public void setOrgId(String orgId) {
this.orgId = orgId;
}
public String getPrecinctId() {
return precinctId;
}
public void setPrecinctId(String precinctId) {
this.precinctId = precinctId;
}
public Object getPrecinctName() {
return precinctName;
}
public void setPrecinctName(Object precinctName) {
this.precinctName = precinctName;
}
public String getParentDeptId() {
return parentDeptId;
}
public void setParentDeptId(String parentDeptId) {
this.parentDeptId = parentDeptId;
}
public Object getParentDeptName() {
return parentDeptName;
}
public void setParentDeptName(Object parentDeptName) {
this.parentDeptName = parentDeptName;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getCreateUserId() {
return createUserId;
}
public void setCreateUserId(String createUserId) {
this.createUserId = createUserId;
}
public String getUpdateTime() {
return updateTime;
}
public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
}
public String getUpdateUserId() {
return updateUserId;
}
public void setUpdateUserId(String updateUserId) {
this.updateUserId = updateUserId;
}
public List<ListBean> getList() {
return list;
}
public void setList(List<ListBean> list) {
this.list = list;
}
private List<BaseNode> childNode;
public void addChildNode(BaseNode baseNode) {
if (baseNode == null) {
return;
}
if (childNode == null) {
childNode = new ArrayList<>();
}
childNode.add(baseNode);
}
@Nullable
@Override
public List<BaseNode> getChildNode() {
return childNode;
}
public static class ListBean extends BaseExpandNode{
private String deptId;
private String deptName;
private String orgId;
private String precinctId;
private Object precinctName;
private String parentDeptId;
private Object parentDeptName;
private String remark;
private int status;
private String createTime;
private String createUserId;
private String updateTime;
private String updateUserId;
public String getDeptId() {
return deptId;
}
public void setDeptId(String deptId) {
this.deptId = deptId;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
public String getOrgId() {
return orgId;
}
public void setOrgId(String orgId) {
this.orgId = orgId;
}
public String getPrecinctId() {
return precinctId;
}
public void setPrecinctId(String precinctId) {
this.precinctId = precinctId;
}
public Object getPrecinctName() {
return precinctName;
}
public void setPrecinctName(Object precinctName) {
this.precinctName = precinctName;
}
public String getParentDeptId() {
return parentDeptId;
}
public void setParentDeptId(String parentDeptId) {
this.parentDeptId = parentDeptId;
}
public Object getParentDeptName() {
return parentDeptName;
}
public void setParentDeptName(Object parentDeptName) {
this.parentDeptName = parentDeptName;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getCreateUserId() {
return createUserId;
}
public void setCreateUserId(String createUserId) {
this.createUserId = createUserId;
}
public String getUpdateTime() {
return updateTime;
}
public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
}
public String getUpdateUserId() {
return updateUserId;
}
public void setUpdateUserId(String updateUserId) {
this.updateUserId = updateUserId;
}
@Nullable
@Override
public List<BaseNode> getChildNode() {
return null;
}
}
}
}
}
}
}
}
关键事项:
a.可展开的一层 extends BaseExpandNode
b.声明子列表的BaseNode: private List childNode;
c.设置添加子列表的addChildNode方法
public void addChildNode(BaseNode baseNode) {
if (baseNode == null) {
return;
}
if (childNode == null) {
childNode = new ArrayList<>();
}
childNode.add(baseNode);
}
d.设置获取子列表的方法
@Nullable
@Override
public List<BaseNode> getChildNode() {
return childNode;
}
2.创建Adapter和相应的层级Provider
public class DeptListShowAdapter extends BaseNodeAdapter {
public static final int EXPAND_COLLAPSE_PAYLOAD = 110;
public List<BaseNode> getUsedData(DeptListBean.DataBean dataBean) {
List<BaseNode> data = new ArrayList<>();
for (int i = 0; i < dataBean.getList().size(); i++) {
DeptListBean.DataBean.ListBeanXXXX listBeanXXXX = dataBean.getList().get(i);
for (int j = 0; j < listBeanXXXX.getList().size(); j++) {
DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX listBeanXXX = listBeanXXXX.getList().get(j);
for (int k = 0; k < listBeanXXX.getList().size(); k++) {
DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX.ListBeanXX listBeanXX = listBeanXXX.getList().get(k);
for (int l = 0; l < listBeanXX.getList().size(); l++) {
DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX.ListBeanXX.ListBeanX listBeanX = listBeanXX.getList().get(l);
for (int m = 0; m < listBeanX.getList().size(); m++) {
DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX.ListBeanXX.ListBeanX.ListBean listBean = listBeanX.getList().get(m);
listBeanX.addChildNode(listBean);
}
listBeanXX.addChildNode(listBeanX);
}
listBeanXXX.addChildNode(listBeanXX);
}
listBeanXXXX.addChildNode(listBeanXXX);
}
data.add(listBeanXXXX);
}
return data;
}
public DeptListShowAdapter() {
addFullSpanNodeProvider(new FirstProvider());
addFullSpanNodeProvider(new SecondProvider());
addFullSpanNodeProvider(new ThirdProvider());
addFullSpanNodeProvider(new FourthProvider());
addNodeProvider(new FifthProvider());
addChildClickViewIds(R.id.rl_to_detail);
}
@Override
protected int getItemType(@NotNull List<? extends BaseNode> list, int i) {
BaseNode node = list.get(i);
if (node instanceof DeptListBean.DataBean.ListBeanXXXX) {
return 0;
} else if (node instanceof DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX) {
return 1;
} else if (node instanceof DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX.ListBeanXX) {
return 2;
} else if (node instanceof DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX.ListBeanXX.ListBeanX) {
return 3;
} else if (node instanceof DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX.ListBeanXX.ListBeanX.ListBean) {
return 4;
}
return -1;
}
public class FirstProvider extends BaseNodeProvider {
@Override
public int getItemViewType() {
return 0;
}
@Override
public int getLayoutId() {
return R.layout.item_node_dept_first;
}
@Override
public void convert(@NotNull BaseViewHolder baseViewHolder, @Nullable BaseNode baseNode) {
DeptListBean.DataBean.ListBeanXXXX bean = (DeptListBean.DataBean.ListBeanXXXX) baseNode;
baseViewHolder.setText(R.id.tv_tittle, bean.getDeptName());
ImageView ivTag = baseViewHolder.getView(R.id.iv_tag);
if (bean.getChildNode() == null || bean.getChildNode().size() == 0) {
ivTag.setImageResource(R.drawable.ic_txl_jg);
} else {
ivTag.setImageResource(R.drawable.ic_dfp_bm_zk);
}
}
@Override
public void convert(@NotNull BaseViewHolder helper, @NotNull BaseNode data, @NotNull List<?> payloads) {
DeptListBean.DataBean.ListBeanXXXX bean = (DeptListBean.DataBean.ListBeanXXXX) data;
if (bean.getChildNode() == null || bean.getChildNode().size() == 0) {
return;
}
for (Object payload : payloads) {
if (payload instanceof Integer && (int) payload == EXPAND_COLLAPSE_PAYLOAD) {
// 增量刷新,使用动画变化箭头
setArrowSpin(helper, data, true);
}
}
}
private void setArrowSpin(BaseViewHolder helper, BaseNode data, boolean isAnimate) {
DeptListBean.DataBean.ListBeanXXXX bean = (DeptListBean.DataBean.ListBeanXXXX) data;
ImageView imageView = helper.getView(R.id.iv_tag);
if (bean.isExpanded()) {
if (isAnimate) {
ViewCompat.animate(imageView).setDuration(200)
.setInterpolator(new DecelerateInterpolator())
.rotation(0f)
.start();
} else {
imageView.setRotation(0f);
}
} else {
if (isAnimate) {
ViewCompat.animate(imageView).setDuration(200)
.setInterpolator(new DecelerateInterpolator())
.rotation(-90f)
.start();
} else {
imageView.setRotation(-90f);
}
}
}
@Override
public void onClick(@NotNull BaseViewHolder helper, @NotNull View view, BaseNode data, int position) {
// getAdapter().expandOrCollapse(position);
// switch (view.getId()) {
// case R.id.rl_tag:
getAdapter().expandOrCollapse(position, true, true, EXPAND_COLLAPSE_PAYLOAD);
// break;
// }
}
}
public class SecondProvider extends BaseNodeProvider {
@Override
public int getItemViewType() {
return 1;
}
@Override
public int getLayoutId() {
return R.layout.item_node_dept_second;
}
@Override
public void convert(@NotNull BaseViewHolder baseViewHolder, @Nullable BaseNode baseNode) {
DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX bean = (DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX) baseNode;
baseViewHolder.setText(R.id.tv_tittle, bean.getDeptName());
ImageView ivTag = baseViewHolder.getView(R.id.iv_tag);
if (bean.getChildNode() == null || bean.getChildNode().size() == 0) {
ivTag.setImageResource(R.drawable.ic_txl_jg);
} else {
ivTag.setImageResource(R.drawable.ic_dfp_bm_zk);
}
}
@Override
public void convert(@NotNull BaseViewHolder helper, @NotNull BaseNode data, @NotNull List<?> payloads) {
DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX bean = (DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX) data;
if (bean.getChildNode() == null || bean.getChildNode().size() == 0) {
return;
}
for (Object payload : payloads) {
if (payload instanceof Integer && (int) payload == EXPAND_COLLAPSE_PAYLOAD) {
// 增量刷新,使用动画变化箭头
setArrowSpin(helper, data, true);
}
}
}
private void setArrowSpin(BaseViewHolder helper, BaseNode data, boolean isAnimate) {
DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX bean = (DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX) data;
ImageView imageView = helper.getView(R.id.iv_tag);
if (bean.isExpanded()) {
if (isAnimate) {
ViewCompat.animate(imageView).setDuration(200)
.setInterpolator(new DecelerateInterpolator())
.rotation(0f)
.start();
} else {
imageView.setRotation(0f);
}
} else {
if (isAnimate) {
ViewCompat.animate(imageView).setDuration(200)
.setInterpolator(new DecelerateInterpolator())
.rotation(-90f)
.start();
} else {
imageView.setRotation(-90f);
}
}
}
@Override
public void onClick(@NotNull BaseViewHolder helper, @NotNull View view, BaseNode data, int position) {
// getAdapter().expandOrCollapse(position);
// switch (view.getId()) {
// case R.id.iv_tag:
getAdapter().expandOrCollapse(position, true, true, EXPAND_COLLAPSE_PAYLOAD);
// break;
// }
}
}
public class ThirdProvider extends BaseNodeProvider {
@Override
public int getItemViewType() {
return 2;
}
@Override
public int getLayoutId() {
return R.layout.item_node_dept_third;
}
@Override
public void convert(@NotNull BaseViewHolder baseViewHolder, @Nullable BaseNode baseNode) {
DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX.ListBeanXX bean = (DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX.ListBeanXX) baseNode;
baseViewHolder.setText(R.id.tv_tittle, bean.getDeptName());
ImageView ivTag = baseViewHolder.getView(R.id.iv_tag);
if (bean.getChildNode() == null || bean.getChildNode().size() == 0) {
ivTag.setImageResource(R.drawable.ic_txl_jg);
} else {
ivTag.setImageResource(R.drawable.ic_dfp_bm_zk);
}
}
@Override
public void convert(@NotNull BaseViewHolder helper, @NotNull BaseNode data, @NotNull List<?> payloads) {
DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX.ListBeanXX bean = (DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX.ListBeanXX) data;
if (bean.getChildNode() == null || bean.getChildNode().size() == 0) {
return;
}
for (Object payload : payloads) {
if (payload instanceof Integer && (int) payload == EXPAND_COLLAPSE_PAYLOAD) {
// 增量刷新,使用动画变化箭头
setArrowSpin(helper, data, true);
}
}
}
private void setArrowSpin(BaseViewHolder helper, BaseNode data, boolean isAnimate) {
DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX.ListBeanXX bean = (DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX.ListBeanXX) data;
ImageView imageView = helper.getView(R.id.iv_tag);
if (bean.isExpanded()) {
if (isAnimate) {
ViewCompat.animate(imageView).setDuration(200)
.setInterpolator(new DecelerateInterpolator())
.rotation(0f)
.start();
} else {
imageView.setRotation(0f);
}
} else {
if (isAnimate) {
ViewCompat.animate(imageView).setDuration(200)
.setInterpolator(new DecelerateInterpolator())
.rotation(-90f)
.start();
} else {
imageView.setRotation(-90f);
}
}
}
@Override
public void onClick(@NotNull BaseViewHolder helper, @NotNull View view, BaseNode data, int position) {
// getAdapter().expandOrCollapse(position);
// switch (view.getId()) {
// case R.id.iv_tag:
getAdapter().expandOrCollapse(position, true, true, EXPAND_COLLAPSE_PAYLOAD);
// break;
// }
}
}
public class FourthProvider extends BaseNodeProvider {
@Override
public int getItemViewType() {
return 3;
}
@Override
public int getLayoutId() {
return R.layout.item_node_dept_fourth;
}
@Override
public void convert(@NotNull BaseViewHolder baseViewHolder, @Nullable BaseNode baseNode) {
DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX.ListBeanXX.ListBeanX bean = (DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX.ListBeanXX.ListBeanX) baseNode;
baseViewHolder.setText(R.id.tv_tittle, bean.getDeptName());
ImageView ivTag = baseViewHolder.getView(R.id.iv_tag);
if (bean.getChildNode() == null || bean.getChildNode().size() == 0) {
ivTag.setImageResource(R.drawable.ic_txl_jg);
} else {
ivTag.setImageResource(R.drawable.ic_dfp_bm_zk);
}
}
@Override
public void convert(@NotNull BaseViewHolder helper, @NotNull BaseNode data, @NotNull List<?> payloads) {
DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX.ListBeanXX.ListBeanX bean = (DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX.ListBeanXX.ListBeanX) data;
if (bean.getChildNode() == null || bean.getChildNode().size() == 0) {
return;
}
for (Object payload : payloads) {
if (payload instanceof Integer && (int) payload == EXPAND_COLLAPSE_PAYLOAD) {
// 增量刷新,使用动画变化箭头
setArrowSpin(helper, data, true);
}
}
}
private void setArrowSpin(BaseViewHolder helper, BaseNode data, boolean isAnimate) {
DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX.ListBeanXX.ListBeanX bean = (DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX.ListBeanXX.ListBeanX) data;
ImageView imageView = helper.getView(R.id.iv_tag);
if (bean.isExpanded()) {
if (isAnimate) {
ViewCompat.animate(imageView).setDuration(200)
.setInterpolator(new DecelerateInterpolator())
.rotation(0f)
.start();
} else {
imageView.setRotation(0f);
}
} else {
if (isAnimate) {
ViewCompat.animate(imageView).setDuration(200)
.setInterpolator(new DecelerateInterpolator())
.rotation(-90f)
.start();
} else {
imageView.setRotation(-90f);
}
}
}
@Override
public void onClick(@NotNull BaseViewHolder helper, @NotNull View view, BaseNode data, int position) {
// getAdapter().expandOrCollapse(position);
// switch (view.getId()) {
// case R.id.iv_tag:
getAdapter().expandOrCollapse(position, true, true, EXPAND_COLLAPSE_PAYLOAD);
// break;
// }
}
}
public class FifthProvider extends BaseNodeProvider {
@Override
public int getItemViewType() {
return 4;
}
@Override
public int getLayoutId() {
return R.layout.item_node_dept_fifth;
}
@Override
public void convert(@NotNull BaseViewHolder baseViewHolder, @Nullable BaseNode baseNode) {
DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX.ListBeanXX.ListBeanX.ListBean bean = (DeptListBean.DataBean.ListBeanXXXX.ListBeanXXX.ListBeanXX.ListBeanX.ListBean) baseNode;
baseViewHolder.setText(R.id.tv_tittle, bean.getDeptName());
}
@Override
public void onClick(@NotNull BaseViewHolder helper, @NotNull View view, BaseNode data, int position) {
}
}
}
3.在Acitivity中的使用
声明
var deptListShowAdapter = DeptListShowAdapter()
配置
rv_list.layoutManager = LinearLayoutManager(this)
rv_list.adapter = deptListShowAdapter
deptListShowAdapter.setList(deptListShowAdapter.getUsedData(data))
点击事件
注意:子控件的点击事件需要调用适配器的添加子控件点击功能的方法
addChildClickViewIds(R.id.rl_to_detail);
整体点击与子控件点击
deptListShowAdapter.setOnItemChildClickListener { adapter, view, position ->
when (view?.id) {
R.id.rl_to_detail -> {
//此处写接下来的逻辑
}
}
}
deptListShowAdapter.setOnItemClickListener(OnItemClickListener { adapter, view, position ->
//此处写接下来的逻辑
})
遇到的坑
如果要设置默认折叠或者展开,可以在处理数据的时候设置
listBean.setExpanded(false);
//在实体类Bean继承的BaseExpandNode中有此属性
abstract class BaseExpandNode : BaseNode() {
var isExpanded: Boolean = true
}
————————————————
版权声明:本文为CSDN博主「跑路羊崽」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_29699527/article/details/111516305