2016-04-05 61 views
2

我有一个Activity1,其中有一个RecyclerView的片段。 选择列表中的项目将启动修改项目的Activity2。 在Activity2完成后返回到Activity1我观察到RecyclerView首先绘制了前Activity2状态(保存的旧项目状态),然后在onActivityResult中,我做了restartLoader(),它提供了一组更新的数据,然后RecyclerView再次使用新数据。Android RecyclerView绘图问题(闪烁)

此行为的问题是RecyclerView 闪烁,因为它最初绘制旧数据,然后使用新数据重新绘制自己。假设我总是希望在Activity1.onActivityResult()中使用refreshLoader(),是否有避免这种闪烁的好方法?


其他复杂的是,我用空视图显示时recycleview是空的...这增加了更加闪烁......

+0

是有使用notifyItemchanged(getAdapterPosition())的任何方法,你可以只更新singleitem数据,而不是整个;? – erluxman

+0

项目也有可能被其他活动删除或添加到列表中。从技术上讲,从数据库重新加载每个人似乎是比跟踪单个项目更普遍的方法。 – Califf

+0

抱歉不能得到你的意思? – erluxman

回答

4

删除更新幢幢回收视图,您可以使用:

RecyclerView.ItemAnimator animator = mRecyclerView.getItemAnimator(); 
    if (animator instanceof SimpleItemAnimator) { 
     ((SimpleItemAnimator) animator).setSupportsChangeAnimations(false); 
    } 

要更新RecyclerView的商品,则应该使用

notifyItemChanged(int position) 

- N的otify任何注册观察员,位置的项目已更改。

代替notifyDataSetChanged()

+0

它确实有帮助,谢谢! – Califf

+0

@ Califf但这似乎并不适用于添加项目,我正在使用加载更多来推动更多的项目在列表中闪烁,但是当我删除它们时没有闪烁的问题... –