2

我使用RecyclerView,其中有一個布爾值涉及getItemCount()。該布爾值控制RecyclerView中最後一項的可見性,有點像加載更多視圖,但略有不同。有時,這個布爾值的值會改變,所以RecyclerView將知道是否包含最後一項。RecyclerView - 通過布爾值控制項目數

的代碼看起來是這樣的

@Override 
public int getItemCount() { 
    return mItemArray.size() + (shouldShow ? 1 : 0); 
} 

shouldShow價值得到更新,我沒有打電話notifyDataSetChanged()notifyItemChanged(),但RecyclerView仍然得到正確更新。但我擔心它最終會導致RecyclerView因不一致而崩潰。我的問題是,

  1. 正在使用動態布爾值getItemCount()正確的方式來控制RecyclerView大小?
  2. 當此布爾值的值發生變化時,我應該撥打notify...()嗎?
  3. 因爲這個原因,我的RecyclerView會因爲不一致而崩潰嗎?

回答

0

禁止實施的一個問題,直到你逝去的INT在它 2.有沒有必要再調用notifydatasetchanged(我們應該叫他們時,他們是在適配器的數據變化) 3.there不會有任何一致性

+0

謝謝你的回答,但是你的意思是'傳遞int'嗎? – katie

+0

我的意思是作爲getItemCount返回詮釋我們應該只傳遞int值你正在傳遞1或0基於布爾值它是正確的 –

0

1.It的確定
2.如果你想顯示你的權利布爾變量發生了變化,你應該叫notifyDataSetChanged()後的最後一個項目,因爲getItemCount()不會被適配器,直到回收視圖滾動調用。
3.如果您不處理所有行爲,該應用程序可能會崩潰。例如,您從mItemArrayonBindViewHolder()方法中獲取一些項目,並且當getItemCount()返回的數字大於數組的大小時,該應用將投擲IndexOutOfBoundException。在這種情況下,您應該檢查位置是否小於數組的大小。

if (position < mItemArray.size()){ 
    //you can get item from the array 
} else { 
    //handle your additional item 
} 
+0

嗨,感謝您的答案。我正在處理有關mItemArray的所有操作,它只是我擔心的布爾值。 – katie