【问题标题】:Realm DB & RecyclerView timing issue while deleting items删除项目时 Realm DB 和 RecyclerView 计时问题
【发布时间】:2017-10-05 09:08:26
【问题描述】:

设置: (project link)

我使用显示名称列表的 RecyclerView(带有 RealmRecyclerViewAdapter),看起来像 this

为了管理左上角粘性索引字母的视图与项目本身的索引字母,RecyclerView 上的 ScrollListener 通过 updateStickyIndex() 设置粘性索引和项目索引的可见性。

问题:

每当我在 Realm DB 中删除某些内容时,更新 RealmTransaction 的 onSuccess() 中的粘性索引将在 RecyclerView 上的项目实际更改之前执行。为了在项目更改后调用 updateStickyIndex(),我必须延迟 onSuccess() 中的调用。

我错过了什么?

【问题讨论】:

  • 从数据库中删除项目后,您没有通知适配器。
  • RealmRecyclerViewAdapter 负责处理这些......所以变化正在发生,只是它发生在 RealmTransaction 的 onSuccess() 回调之后。
  • 我正在寻找的是是否有办法知道适配器本身何时完成将更改传递给recyclerview?
  • github.com/realm/realm-android-adapters/blob/master/adapters/… updateData 函数确实通知recyclerview
  • updateData 用于更改 changelistener 链接到的数据集。就我而言,我继续使用我在适配器的构造函数中传递的数据集(OrderedRealmCollection)。每当该 OrderedRealmCollection 中的对象发生更改时,该更改就会被设置为它的侦听器捕获,并调用侦听器的 onChange()。问题是,事务完成后,适配器不一定完成将这些更改传递给 RecyclerView。我想 recyclerview 更新后更新粘性索引,但我似乎找不到钩子。

标签: android android-recyclerview realm-java


【解决方案1】:

通过覆盖 LinearLayoutManager 的 onLayoutCompleted()(从 here 获得),可以在正确的时刻调用粘性索引的更新(在 LayoutManager 实际完成 DB/Adapter 中的更改之后)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多