最近因为需要上下拉的刷新的功能,又不想重复造轮子,小编特意去找了个第三方的开源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 0E/bug: RecyclerView ----> Adapter 1 Layout 1 position 1E/bug: RecyclerView ----> Adapter 2 Layout 2 position 2E/bug: RecyclerView ----> Adapter 3 Layout 3 position 3 嗯,没问题,位置都一样接下来我们看XRecyclerView
E/bug: XRecyclerView ----> Adapter 1 Layout 1 position 0E/bug: XRecyclerView ----> Adapter 2 Layout 2 position 1E/bug: XRecyclerView ----> Adapter 3 Layout 3 position 2E/bug: XRecyclerView ----> Adapter 4 Layout 4 position 3 心累啊,怪不得一直挂,这锅谁背?
知道原因,解决就好办了,在原RecyclerView 错乱问题的基础上,对使用holder.getAdapterPosition() 、holder.getLayoutPosition() 、position进行一定的加减一操作就可以了这是不是 XRecyclerView 的bug?还是说我遇到了一个假的XRecyclerView
新闻热点
疑难解答