最近因为需要上下拉的刷新的功能,又不想重复造轮子,小编特意去找了个第三方的开源lib,
现在第三方上下拉刷新的开源lib是非常之多啊,我就不介绍了,反正小编情有独钟的看上了XRecyclerView ,
至于为什么,其实是朋友推荐的。。。。。
XRecyclerView 使用起来还是挺方便的,小编使用的过程,一路溜溜溜的,各种上下拉加载,
数据和布局显示都正常 ,但有个需求就是要能删除某一个item(还没做点击事件),按道理说,原
RecyclerView 已经自带增加删除,只要按正常套路走(排除原RecyclerView 的移除后的错乱问题),
是能正常实现增删功能的,但是结果总是出乎人的意料,居然还是出问题了,我滴个天啊啊啊。。。
算了,还是直接上代码吧
小编使用了 XRecyclerView 和 原 RecyclerView 进行比较 :
XRecyclerView 的设置
mAdapter = new TestAdapter(mContext,"XRecyclerView");
mLlManager = new LinearLayoutManager(mContext);
mLlManager.setOrientation(LinearLayoutManager.VERTICAL);
mXRcView.setLayoutManager(mLlManager);
mXRcView.setAdapter(mAdapter);
原 RecyclerView 的设置
mAdapter = new TestAdapter(mContext,"RecyclerView");
mLlManager = new LinearLayoutManager(mContext);
mLlManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecycler.setLayoutManager(mLlManager);
mRecycler.setAdapter(mAdapter);
以上两个属性的设置都一样的 , adapter 也是一样的
看看adapter 的数据绑定方法里,就对三个位置属性进行了打印,不做其他
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
Log.e("bug", mTag + " ----> Adapter " + holder.getAdapterPosition() + " Layout " + holder.getLayoutPosition() + " position " + position);
}
然后不应用跑起来,不做任何点击和删除操作,直接看控制台打印
先看原 RecyclerView
E/bug: RecyclerView ----> Adapter 0 Layout 0 position 0
E/bug: RecyclerView ----> Adapter 1 Layout 1 position 1
E/bug: RecyclerView ----> Adapter 2 Layout 2 position 2
E/bug: RecyclerView ----> Adapter 3 Layout 3 position 3
嗯,没问题,位置都一样
接下来我们看XRecyclerView
E/bug: XRecyclerView ----> Adapter 1 Layout 1 position 0
E/bug: XRecyclerView ----> Adapter 2 Layout 2 position 1
E/bug: XRecyclerView ----> Adapter 3 Layout 3 position 2
E/bug: XRecyclerView ----> Adapter 4 Layout 4 position 3
心累啊,怪不得一直挂,这锅谁背?
知道原因解决就好办了,在原RecyclerView 错乱问题的基础上,对使用holder.getAdapterPosition() 、holder.getLayoutPosition() 、position
进行一定的加减一操作就可以了
这是不是 XRecyclerView 的bug?还是说我遇到了一个假的XRecyclerView