2016-07-29 6 views
2

notifyDataSetChangedを呼び出すときに、RecyclerViewのアイテムを更新する必要はありません。RecyclerViewでnotifyDataSetChangedを実行したときに、指定したアイテムを更新しない方法

しかし、指定したアイテムを更新しないようにする方法が見つかりませんでした。これは可能ですか?アイテムがWebViewで、それはhtmlページをロードしていたので、私はこれを行う必要があり


私はnotifyDataSetChangedを呼び出した場合、この項目は点滅します。

notifyDataSetChangedthis 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); 
    } 
} 

そこで、我々は、アダプタ内のすべての要素をループする必要があるとだけそれらの位置which you do not want to excludeためnotifyItemChanged()を呼び出します。

関連する問題