[CymChad/BaseRecyclerViewAdapterHelper]子节点展开的问题

2024-08-08 837 views
0

当某个节点展开的时候使用了 mData.addAll(position + 1, list); 这样的一句代码,将子节点的所有数据添加到父节点中 那么导致了外部传递进去的 List 数据发生改变,而且因为类型擦除的原因?导致外部 List 中存在多种数据类型

回答

9

因为是通过外部list来显示视图,展开就是通过添加子节点列表到外部list实现的

9

那这样的话 外部的List 数据结构其实就乱了的 内部可不可以通过获取子节点列表的方式 来展现呢 对外部的List不进行 修改 因为我现在遇到的问题是拿不到我的原始数据结构了

0

要么自己要保存相关数据的引用(好像不可行),要么通过类型信息比如instanceof或getClass来重建数据机构

4

我去循环判断类型的时候,就报了类型转换异常 因为List 中已经有两种数据类型了

5

你要先用instanceof判断类型啊

5

如果删除父节点或者子节点的数据 重新刷新界面 界面会全部关闭 数据也乱了,不知道有没有什么好办法

5

提前将数据组合好放入adapter,即可。

2

如果你需要添加或者删除子项可以(思路一样)

// 获取当前父级位置
 int cp = getParentPosition(person);
// 通过父级位置找到当前list,删除指定下级
 ((Level1Item)getData().get(cp)).removeSubItem(person);
// 列表层删除相关位置的数据
 getData().remove(holder.getLayoutPosition());
// 更新视图
 notifyDataSetChanged();
2

3Q 我尝试一下