在使用一葉飄舟的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;問題就解決了
新聞熱點
疑難解答