Closed qiaoyj closed 7 years ago
activity中使用list的时候,直接adapter.getAllData(),不需要手动管理
当前用ItemTouchHelper对recyclerView拖动排序的时候,如何交换adapter内数据集合的顺序?
private class TestCallback extends ItemTouchHelper.Callback{
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
return 0;
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
RecyclerArrayAdapter adapter = (RecyclerArrayAdapter) recyclerView.getAdapter();
//adapter.getAllData(),这样是无法交换数据的
Collections.swap(adapter.getAllData(), viewHolder.getAdapterPosition(), target.getAdapterPosition());
return true;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
}
}
确实是缺陷。 V4.2.6以前是疏漏了。我从很早的版本开始就没想让开发者可以直接操作数据。我需要知道用户对数据做了哪些操作,很多操作我要做相应动作来保证库功能,直接改了就没办法了。 懂原理的也许可以拿着源数据做些更多功能且没有问题。 但好多人来向我报bug,就是他们不懂原理还瞎改源数据。。人太多我就封了这些个暴露源数据的API。
另外我也并不是封死了。。你们不觉得RecyclerArrayAdapter
的所有成员属性...都是protected
的吗...在你们子Adapter内部,你想改啥改啥...
嗯.我觉得会发现这些东西的人,一定可以完美拓展功能不出bug。
谢谢,我明白怎么做了。
RecyclerArrayAdapter.java
V4.2.6
V4.3.0
为什么要这么改?在数据增删的时候维护起来很麻烦。既要维护Adapter中的数据,又要维护activity中的数据。 当前我用的版本是4.2.3,升到最新版本4.4.0发现了这个问题。当在Activity中在数据集合中添加了元素,再调用adapter.notifyItemInserted刷新报了错,因为adapter中的数据集合与activity中的已经不是同一个引用了。