Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在RecyclerView中notifyDataSetChanged时使指定项不更新_Android_Android Recyclerview_Notifydatasetchanged - Fatal编程技术网

Android 如何在RecyclerView中notifyDataSetChanged时使指定项不更新

Android 如何在RecyclerView中notifyDataSetChanged时使指定项不更新,android,android-recyclerview,notifydatasetchanged,Android,Android Recyclerview,Notifydatasetchanged,我在RecyclerView中有一个项目,当我调用notifyDataSetChanged时,它不需要更新 但是我没有找到任何方法使指定的项避免更新。有可能这样做吗 我需要这样做,因为该项目是一个WebView,它加载了一个html页面,如果我调用notifydatasetchange,该项目将闪烁 我发布此问题的原因是在notifydatasetchange时避免了WebView的闪烁(请参阅)。在使用notifyItemRangeXXX方法失败后,我发布了这个问题 但是在检查您的答案和评论

我在
RecyclerView
中有一个项目,当我调用
notifyDataSetChanged
时,它不需要更新

但是我没有找到任何方法使指定的项避免更新。有可能这样做吗


我需要这样做,因为该项目是一个
WebView
,它加载了一个html页面,如果我调用
notifydatasetchange
,该项目将闪烁

我发布此问题的原因是在
notifydatasetchange
时避免了
WebView
的闪烁(请参阅)。在使用
notifyItemRangeXXX
方法失败后,我发布了这个问题


但是在检查您的答案和评论后,似乎无法避免在使用
notifyDataSetChanged

时进行更新,您应该以不同的方式思考哪些项目需要更新。要更新项目的UI,在数据更改后使用方法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)

是的,这实际上是可能的
notifyDataSetChanged()
通知RecyclerView数据集中的所有元素都已更改

因为您不希望发生这种情况并排除特定项目

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

因此,我们需要遍历适配器中的所有元素,并仅为那些您不想排除的位置调用
notifyItemChanged()

如果您不想更新它,请不要更改数据源如果可行,您还可以使用
notifyItemChanged(pos)
适用于除相关项目之外的其他项目。如果您使用的是RecyclerView.Adapter。您可能需要考虑NoTyItEfMechange(int位置)、NoTIFYITEMangeRechange(int Posits Stand,int ItMeCalt)方法