在使用一叶飘舟的LRecyclerView时 由于该框架使用了观察者模式来处理headerView和footView,因此不能用普通的方法来解决notifyDataSetChanged后图片闪烁的问题
研究了一下解决步骤如下:
解决原理仍旧是使用tag的方式保存信息
在adapter里给viewholder设置tag的方式保存图片url
viewHolder.mPReview.setTag(item.getScaledUrl());由于LRecyclerView使用了观察者模式,因此仅仅将mDataAdapter设置setHasStableIds为true是不够的,需要同时将mLRecyclerViewAdapter也设置setHasStableIds为true
mDataAdapter.setHasStableIds(true);mLRecyclerViewAdapter.setHasStableIds(true);注意:
mLRecyclerViewAdapter.setHasStableIds(true);需要在
mRecyclerView.setAdapter(mLRecyclerViewAdapter);前面设置,否则会报错
最后在adapter中重写了getItemId方法
@Override public long getItemId(int position) { return position; }但是发现报Called attach on a child which is not detached错误
跟踪了下源码发现是由于LRecyclerViewAdapter有一个ArrowRefreshHeader所以导致itemid多了一位
因此将getitemid()方法返回值更改为
return position - 1;问题就解决了
新闻热点
疑难解答