2016-07-29 46 views
2

notifyDataSetChanged當我有一個RecyclerView項目,並不需要進行更新時,我打電話notifyDataSetChanged指定項目不會更新。如何使RecyclerView

但是我沒有找到任何方法,使指定的項目避免更新。是否有可能做到這一點 ?


我需要這樣做,因爲該項目是一個WebView,它加載的HTML頁面,如果我叫notifyDataSetChanged,這個項目將閃爍。

我發佈此問題的原因是當(參見this quesion)時避免了WebView的閃爍。在使用notifyItemRangeXXX方法失敗後,我發佈了這個問題。

但檢查你的答案和意見後,似乎是不可能避免使用更新時notifyDataSetChanged

+1

,如果你不希望它更新,不要更改數據源 –

+0

如果可行的話,你也可以用'notifyItemChanged(POS)'別人除了在問題的項目。 – Shaishav

+0

如果您正在使用RecyclerView.Adapter。您可能需要考慮notifyItemChanged(int position),notifyItemRangeChanged(int positionStart,int itemCount)方法 –

回答

2

notifyDataSetChanged的目的是更新所有項目。不要使用它,如果你不想要這種行爲!

正確的做法是隻更新你已經改變的數據。有一些方法可以幫助您僅使所需的數據無效:

notifyItemChanged(int position) 
notifyItemInserted(int position) 
notifyItemMoved(int fromPosition, int toPosition) 
notifyItemRangeChanged(int positionStart, int itemCount) 
notifyItemRangeRemoved(int positionStart, int itemCount) 
notifyItemRemoved(int position) 
1

你應該用不同的方式思考 - 哪些項目需要更新。要更新項目的UI,數據更改後使用方法notifyitemchanged

2

是的,它實際上可以這樣做。 notifyDataSetChanged()通知RecyclerView 數據集中的所有元素已更改

當你不希望這樣的事情發生,並排除特定項目。

for(int i = 0; i< mAdapter.getItemCount(); i++){ 
    if(i != itemPositionToExclude){ 
     mAdapter.notifyItemChanged(i); 
    } 
} 

所以,我們需要遍歷在適配器的所有元素,並呼籲notifyItemChanged()只爲那些位置which you do not want to exclude