当某个节点展开的时候使用了 mData.addAll(position + 1, list); 这样的一句代码,将子节点的所有数据添加到父节点中 那么导致了外部传递进去的 List 数据发生改变,而且因为类型擦除的原因?导致外部 List 中存在多种数据类型
Q
[CymChad/BaseRecyclerViewAdapterHelper]子节点展开的问题
8
A
回答
8
因为是通过外部list来显示视图,展开就是通过添加子节点列表到外部list实现的
8
那这样的话 外部的List 数据结构其实就乱了的 内部可不可以通过获取子节点列表的方式 来展现呢 对外部的List不进行 修改 因为我现在遇到的问题是拿不到我的原始数据结构了
8
要么自己要保存相关数据的引用(好像不可行),要么通过类型信息比如instanceof或getClass来重建数据机构
7
我去循环判断类型的时候,就报了类型转换异常 因为List 中已经有两种数据类型了
3
你要先用instanceof判断类型啊
3
如果删除父节点或者子节点的数据 重新刷新界面 界面会全部关闭 数据也乱了,不知道有没有什么好办法
0
2
提前将数据组合好放入adapter,即可。
2
如果你需要添加或者删除子项可以(思路一样)
// 获取当前父级位置
int cp = getParentPosition(person);
// 通过父级位置找到当前list,删除指定下级
((Level1Item)getData().get(cp)).removeSubItem(person);
// 列表层删除相关位置的数据
getData().remove(holder.getLayoutPosition());
// 更新视图
notifyDataSetChanged();
5
3Q 我尝试一下