我在RecyclerView
中有一个项目,在我致电notifyDataSetChanged
时无需更新。
但是我没有找到任何方法来使指定的项目避免更新。有可能这样做吗?
我需要这样做是因为该项目是WebView
,它已经加载了一个html页面,如果我调用了notifyDataSetChanged
,这个项目就会闪现。
我发布此问题的原因是在WebView
时避免notifyDataSetChanged
的闪现(请参阅this quesion)。在使用notifyItemRangeXXX
方法失败后,我发布了这个问题。
但是在检查了你的答案和评论后,似乎在使用notifyDataSetChanged
时无法避免更新。
答案 0 :(得分:3)
notifyItemChanged(int position)
notifyItemInserted(int position)
notifyItemMoved(int fromPosition, int toPosition)
notifyItemRangeChanged(int positionStart, int itemCount)
notifyItemRangeRemoved(int positionStart, int itemCount)
notifyItemRemoved(int position)
IS的目的是更新所有项目。如果你不想要这种行为,请不要使用它!
正确的方法是仅更新您已更改的数据。有一些方法可以帮助您只使所需数据无效:
<?php
namespace My\MiddlewareBundle\Controller;
use FOS\RestBundle\Controller\FOSRestController;
class ExportController extends FOSRestController
{
public function indexAction($exportId)
{
$result = exportSomeThingSpecial($exportId);
return $this->handleView($this->view(['test' => 'bla'], ($result) ? 201 : 500));
}
}
答案 1 :(得分: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
。
答案 2 :(得分:1)
您应该以不同的方式思考 - 需要更新哪些项目。要更新项目的UI,请在更改数据后使用方法notifyitemchanged