ContentObserver可以与新的RecyclerView notifyItem函数一起使用吗?

时间:2015-05-26 20:15:27

标签: android android-adapter android-recyclerview android-cursor

我正在努力弄清楚如何利用RecyclerView.Adapter

中的扩展通知函数集
final void notifyItemChanged(int position)
final void notifyItemInserted(int position)
final void notifyItemMoved(int fromPosition, int toPosition)
final void notifyItemRangeChanged(int positionStart, int itemCount)
final void notifyItemRangeInserted(int positionStart, int itemCount)
final void notifyItemRangeRemoved(int positionStart, int itemCount)
final void notifyItemRemoved(int position)

这是我的理由:

如果我使用ContentProvider填充我的RecyclerView,并使用ContentObserver通知我的RecyclerView适配器数据集更改,则ContentObserver只有onChange(boolean self, Uri uri)来传达对适配​​器的更改。仅此功能无法提供足够的信息来正确区分应使用哪个notifyItem.....函数。

RecyclerView适配器的这些通知功能是否与ContentObserver一起使用?或者它们是否打算以其他方式使用?

谢谢!

1 个答案:

答案 0 :(得分:1)

a reddit post开始,归功于原始作者defer

  
      
  1. 使光标可交换(即向适配器添加swapCursor(Cursor)方法,以更改存储的光标然后调用   notifyDataSetChanged())。
  2.   适配器中的
  3. setHasStableIds(true)
  4.   
  5. 覆盖适配器中的getItemId()以为每个位置提供唯一ID,这些唯一ID应直接映射到您的数据库   id表示适配器可以轻松地与它们交叉引用   以前的光标状态。
  6.   
  7. 当您的内容发生更改时,只需使用新光标调用新的swapCursor方法,它将使用唯一ID来映射上一个   陈述到新的并自动计算适当的   动画。
  8.         

    编辑:我假设你有一个光标,实际上它适用于任何光标   基础数据结构,关键是setHasStableIds,覆盖   getItemId函数并调用notifyDataSetChanged