领域对象没有立即更新?

时间:2017-01-18 14:33:55

标签: android realm

我有一个实现RealmChangeListener的片段A,你可以从片段A到片段B.在片段B上你可以改变一些数据,然后在popBackStack() / backPressed我想要片段A来反映片段B上所做的更改。是否清楚了?

场景

  1. 片段A(显示客户信息)
  2. 片段B(用户更改,例如客户名称)
  3. 后退
  4. 片段A - 显示新客户名称
  5. 但在最后一步中,我只看到旧客户名称。当我再次去片段B时,我终于可以看到新的名字,然后在另一个反对片段A上我也看到了新的名字。

    问题:为什么我在FIRST从片段B返回到片段A后不能立即显示新名称?

    如果您想查看一些代码,请随时问我。

    修改

    不,这不是因为我没有更新UI ...导航回片段A后,再次查询域以获取新数据。

2 个答案:

答案 0 :(得分:0)

这是你的声音所带来的问题。

  • 正在创建片段A,并使用Realm对象X中的数据填充UI。
  • 然后导航到Fragment B并更新Realm对象X数据
  • 然后导航回片段A,UI未反映您对片段B上的Realm对象X所做的更改。

解决方案是您需要更新UI以反映您对Realm对象X所做的更改。您可以在片段A的onResume()方法中执行此操作。这里您要从Realm读取新数据对象X并相应地更新UI。

简而言之,您的数据对象已经更新,只是您没有显示这些新数据,因为您很可能在片段A的onCreate()方法中填充了UI。当您向后导航时,不会再次调用此数据来自片段B的片段A。

答案 1 :(得分:0)

您需要在onCreateView()中注册RealmChangeListener并将其分离到onDestroyView(),但问题是当您将新片段添加到另一个片段之上时,将调用onDestroyView()

因此不会调用您的RealmChangeListener。在向其添加RealmChangeListener之前,您应该在onCreateView()中重新初始化查询。

另外,请确保保留对结果的字段引用。