2015-09-24 142 views
5

我遇到RecyclerView#Adapter關於notifyItemRangeChanged的問題。看起來,如果Adapter認爲它的尺寸爲0,從上次調用getItemCount開始,然後我呼叫Adapter#notifyItemRangeChanged(0, 1)Adapter將簡單地忽略該調用(例如,它不會導致插入新項目)。RecyclerView notifyItemRangeChanged不顯示新數據

這是預期的行爲?

回答

13

這是預期的行爲?

簡答:是的。

從文檔上notifyDataSetChanged()(是的,不同的方法,我知道,但只是引用在這裏,因爲它解釋之間項目改變結構變化差):

有兩種不同數據變化事件類別,項目變化和結構變化。項目更改是指單個項目更新其數據但未發生位置更改時。結構更改是指在數據集中插入,移除或移動項目時。

現在可以通過對文檔的notifyItemRangeChanged()(我的重點)讀:

這是一個項目的變化事件,而不是一個結構變化事件。它表示任何對給定位置範圍內數據的反映已過時並應更新。給定範圍內的項目保留相同的身份。

這應該回答你的問題。您正在製作一個結構變化(即您正在添加一個項目),因此notifyItemRangeChanged()而不是的適當方法來調用。相反,你應該打電話notifyItemRangeInserted()(或其單數等值),這確實表明結構發生了變化。

+0

啊,謝謝你的詳細解答!這很不幸,因爲我的適配器結構由子適配器組成,所以我基本上希望子適配器在發生某些更改時通知父適配器範圍更改,而不是刷新整個父適配器。然而,現在我想到了,我應該做的,而不是使用'notifyItemRangeInserted',以便父適配器知道新數據...無論如何,我現在正在blabbering。再次感謝 :) – Jin