[Android] RecyclerView的Bug:IndexOutOfException

本文介紹項目中使用RecyclerView遇到的一個小坑。

異常原因:java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 10…

復(fù)現(xiàn)手法:RecyclerView使用SwipeRefreshLayout下拉刷新數(shù)據(jù),迅速上滑RecyclerView,這時新數(shù)據(jù)還沒到來,RecyclerView要加載下面的Item,又沒有數(shù)據(jù)源,就會造成崩潰,而且異常不會報到我們的代碼上,拋出RecyclerView內(nèi)部錯誤。

解決辦法:

1.下滑的同時到adapter更新數(shù)據(jù)完畢,讓RecyclerView暫時禁止滑動。

rvActivityList.setOnTouchListener(newView.OnTouchListener() {

? ?@Override

? ? public booleanonTouch(View v,MotionEvent event) {

? ? ? ? if(isDoingRefresh) {

? ? ? ? ? ?return true;

? ? ? ? }else{

? ? ? ? return false;

? ? ? ?}

? ? }

});?

//當(dāng)刷新時設(shè)置//mIsRefreshing=true;//刷新完畢后還原為false//mIsRefreshing=false;此方法用戶體驗差,極為不明智。

2.第二種方法

我們在進(jìn)行數(shù)據(jù)移除和數(shù)據(jù)增加時,務(wù)必要保證RecyclerView的Adapter中的數(shù)據(jù)集和移除/添加等操作后的數(shù)據(jù)集保持一致!

外部數(shù)據(jù)集同步到內(nèi)部數(shù)據(jù)集,使用如下的方法:

notifyItemRangeRemoved();

notifyItemRangeInserted();

notifyItemRangeChanged();

notifyDataSetChanged();

使用notifyDataSetChange()方法更新內(nèi)部數(shù)據(jù)集,沒有默認(rèn)的動畫效果,同時更新數(shù)據(jù)的效率頁不如上面的方法,官方不推薦使用這種方式更新數(shù)據(jù)集,個人認(rèn)為使用這個還不如使用ListView。

mLeaveList.clear();

mAdapter.notifyItemRangeRemoved(0,preListSize);//通知RecyclerView移除數(shù)據(jù)集

mLeaveList.addAll(result);

mAdapter.notifyItemRangeInserted(0,mLeaveList.size());//更新RecyclerView數(shù)據(jù)集

每次對List進(jìn)行操作時,通知到Adapter數(shù)據(jù)已改變。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,810評論 25 709
  • 做一個類似微信朋友圈的小任務(wù),信心滿滿地打算使用ListView控件完成,和小組一討論發(fā)現(xiàn)大家都推薦我用Recyc...
    sunnyaxin閱讀 2,530評論 3 23
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 47,135評論 22 665
  • 簡介: 提供一個讓有限的窗口變成一個大數(shù)據(jù)集的靈活視圖。 術(shù)語表: Adapter:RecyclerView的子類...
    酷泡泡閱讀 5,358評論 0 16
  • 11.6 這一天上班都不在狀態(tài)。心里惦記著七七,上著淘寶網(wǎng)打算雙十一給他買一些用的吃的,但又怕到雙十一來不及...
    石榴沒有籽閱讀 302評論 0 1

友情鏈接更多精彩內(nèi)容