Cannot call this method while RecyclerView is computing a layout or scrolling

因?yàn)镽ecyclerView在計(jì)算layout的時(shí)候不允許你更新Adapter內(nèi)容括袒。

當(dāng)我們調(diào)用
image.png

這些notify去更新adapter的內(nèi)容時(shí)享钞,如果RcyclerView正在isComputingLayout倾鲫,就會(huì)報(bào)此錯(cuò)誤;
image.png

在recyclerView中的實(shí)現(xiàn)


image.png

在assertNotInLayoutOrScroll方法中,如果isComputingLayout為true捷犹,就會(huì)報(bào)錯(cuò)
image.png

iscomputingLayout方法如下弛饭,是通過mLayoutOrScrollCounter成員變量統(tǒng)計(jì)正在layout或scroll的item的數(shù)量
 public boolean isComputingLayout() {
        return mLayoutOrScrollCounter > 0;
    }

上面是異常路徑,以下分析導(dǎo)致這個(gè)異常的原因
recyclerview對(duì)應(yīng)一個(gè)adapter萍歉,當(dāng)adapter中的數(shù)據(jù)發(fā)生改變時(shí)侣颂,必須通過notify方法通知recyclerview

List<TimelineItemResp> buyList = data.getPageData();
                        if (pageNo == 1) {
                            purchaseWorks.clear();
                            List<DataTabResp> tabList = data.getTabList();
                            getUI().updateFilterData(tabList, data.getBuyCount());
                        }
                        if (buyList != null ) {
                            if ( buyList.size() <= 0) {
                                getUI().setLoadMoreEnable(false);
                            } else {
                                getUI().setLoadMoreEnable(true);
                                purchaseWorks.addAll(buyList);
                                getUI().updateWorkList(purchaseWorks);
                                pageNo++;
                            }
                        }

setLoadMoreEnable(false);這個(gè)方法中由于業(yè)務(wù)邏輯做了一個(gè)notifyItemChanged(itemCount - 1);
updateWorkList(purchaseWorks);方法是直接給adapter。addAll枪孩,如下
網(wǎng)絡(luò)請(qǐng)求的數(shù)據(jù)憔晒,傳的是對(duì)象的地址值

public void addAll(List<T> mList) {
        mDatas = mList;
        notifyDataSetChanged();
    }

網(wǎng)絡(luò)請(qǐng)求的數(shù)據(jù)list沒有數(shù)據(jù)時(shí),adapter中的dataList會(huì)被clear销凑,然后走notifyItemChanged(-1);丛晌,數(shù)據(jù)改變,notify錯(cuò)誤斗幼,如果不及時(shí)糾正澎蛛,就會(huì)報(bào)此錯(cuò)誤,

getAdapter().getDataList().clear();
                    getAdapter().notifyItemChanged(0);
                    getAdapter().notifyDataSetChanged();

清除數(shù)據(jù)后蜕窿,notifyitem錯(cuò)誤谋逻,然后及時(shí)調(diào)用notifyDataSetChanged糾正錯(cuò)誤,就不會(huì)出錯(cuò)桐经。

如果notifyitem錯(cuò)誤后毁兆,再繼續(xù)notifyitem,就會(huì)報(bào)錯(cuò)

如果notifyitem錯(cuò)誤后阴挣,adapter中的datalist又發(fā)生改變气堕,notifyDataSetChanged也會(huì)報(bào)錯(cuò)。

結(jié)論:adapter中的datalist數(shù)據(jù)發(fā)生改變畔咧,notify錯(cuò)誤茎芭,沒有及時(shí)糾正,或者數(shù)據(jù)又改變誓沸,也會(huì)報(bào)此錯(cuò)梅桩,所以數(shù)據(jù)改變要notify正確,比如position正確拜隧,notifyitem時(shí)一定要保證position是正確的(pos有效宿百,不越界),notifyDataSetChanged沒有這問題

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末洪添,一起剝皮案震驚了整個(gè)濱河市垦页,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌薇组,老刑警劉巖外臂,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡宋光,警方通過查閱死者的電腦和手機(jī)貌矿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來罪佳,“玉大人逛漫,你說我怎么就攤上這事∽秆蓿” “怎么了酌毡?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蕾管。 經(jīng)常有香客問我枷踏,道長(zhǎng),這世上最難降的妖魔是什么掰曾? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任旭蠕,我火速辦了婚禮,結(jié)果婚禮上旷坦,老公的妹妹穿的比我還像新娘掏熬。我一直安慰自己,他們只是感情好秒梅,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布旗芬。 她就那樣靜靜地躺著,像睡著了一般捆蜀。 火紅的嫁衣襯著肌膚如雪疮丛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天辆它,我揣著相機(jī)與錄音这刷,去河邊找鬼。 笑死娩井,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的似袁。 我是一名探鬼主播洞辣,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼昙衅!你這毒婦竟也來了扬霜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤而涉,失蹤者是張志新(化名)和其女友劉穎著瓶,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啼县,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡材原,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年沸久,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片余蟹。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡卷胯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出威酒,到底是詐尸還是另有隱情窑睁,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布葵孤,位于F島的核電站担钮,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏尤仍。R本人自食惡果不足惜箫津,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吓著。 院中可真熱鬧鲤嫡,春花似錦、人聲如沸绑莺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纺裁。三九已至诫肠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間欺缘,已是汗流浹背栋豫。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谚殊,地道東北人丧鸯。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像嫩絮,于是被迫代替她去往敵國和親丛肢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355