Android 领域对象没有立即更新吗?
我有一个片段a,它实现了Android 领域对象没有立即更新吗?,android,realm,Android,Realm,我有一个片段a,它实现了RealmChangeListener,你可以从片段a到片段B。在片段B上你可以更改一些数据,然后在popBackStack()/backPressed上,我希望片段a反映对片段B所做的更改。清楚了吗 情景 片段A(显示客户信息) 片段B(用户更改,如客户名称) 背压 片段A-显示新客户名称 但在最后一步中,我只看到老客户的名字。当我再次转到片段B时,我终于可以看到新名称,然后在另一个返回到片段A时,我也看到了新名称 问:为什么我不能在第一次从片段B返回到片段A后立即显示
RealmChangeListener
,你可以从片段a到片段B。在片段B上你可以更改一些数据,然后在popBackStack()
/backPressed
上,我希望片段a反映对片段B所做的更改。清楚了吗
情景
不,这不是因为我没有更新用户界面。。。导航回片段A后,将再次查询领域以获得新数据。这就是您所遇到的问题
- 正在创建片段A,并使用来自领域对象X的数据填充UI
- 然后导航到片段B并更新领域对象X数据
- 然后导航回片段A,UI没有反映您对片段B上的领域对象X所做的更改
简言之,您的数据对象已经更新,只是您没有显示这些新数据,因为您很可能已经在片段A的onCreate()方法中填充了UI。当您从片段B导航回片段A时,将不会再次调用它。您需要在
onCreateView()中注册RealmChangeListener
并在onDestroyView()
中将其分离,但问题是,当您将新片段添加到另一个片段上时,将调用onDestroyView()
因此您的RealmChangeListener将不会被调用。在将RealmChangeListener添加到查询之前,应该在onCreateView()
中重新初始化查询
此外,请确保保留对结果的字段引用 你熟悉片段生命周期吗?当你导航到一个新片段时会发生什么?@TimCastelijns当然。。。我已经检查过调用领域查询的方法是否在弹出堆栈之后调用……谢谢你的建议,但事实并非如此。我调用realmquery在从片段B导航回对象X时获取对象X的最新版本A@kristyna是的,它会发生。由于realm在保存数据之前需要花费时间,因此创建了片段B。我面临着这个问题,希望你现在知道了。我正在使用延迟临时解决它。