Android 领域对象没有立即更新吗?

Android 领域对象没有立即更新吗?,android,realm,Android,Realm,我有一个片段a,它实现了RealmChangeListener,你可以从片段a到片段B。在片段B上你可以更改一些数据,然后在popBackStack()/backPressed上,我希望片段a反映对片段B所做的更改。清楚了吗 情景 片段A(显示客户信息) 片段B(用户更改,如客户名称) 背压 片段A-显示新客户名称 但在最后一步中,我只看到老客户的名字。当我再次转到片段B时,我终于可以看到新名称,然后在另一个返回到片段A时,我也看到了新名称 问:为什么我不能在第一次从片段B返回到片段A后立即显示

我有一个片段a,它实现了
RealmChangeListener
,你可以从片段a到片段B。在片段B上你可以更改一些数据,然后在
popBackStack()
/
backPressed
上,我希望片段a反映对片段B所做的更改。清楚了吗

情景

  • 片段A(显示客户信息)
  • 片段B(用户更改,如客户名称)
  • 背压
  • 片段A-显示新客户名称
  • 但在最后一步中,我只看到老客户的名字。当我再次转到片段B时,我终于可以看到新名称,然后在另一个返回到片段A时,我也看到了新名称

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

    如果你想看一些代码,请随时问我

    编辑


    不,这不是因为我没有更新用户界面。。。导航回片段A后,将再次查询领域以获得新数据。

    这就是您所遇到的问题

    • 正在创建片段A,并使用来自领域对象X的数据填充UI
    • 然后导航到片段B并更新领域对象X数据
    • 然后导航回片段A,UI没有反映您对片段B上的领域对象X所做的更改
    解决方案是您需要更新UI以反映您对领域对象X所做的更改。您可以在片段A的onResume()方法中执行此操作。在这里,您希望从领域对象X读取新数据并相应地更新UI


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

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

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


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

    你熟悉片段生命周期吗?当你导航到一个新片段时会发生什么?@TimCastelijns当然。。。我已经检查过调用领域查询的方法是否在弹出堆栈之后调用……谢谢你的建议,但事实并非如此。我调用realmquery在从片段B导航回对象X时获取对象X的最新版本A@kristyna是的,它会发生。由于realm在保存数据之前需要花费时间,因此创建了片段B。我面临着这个问题,希望你现在知道了。我正在使用延迟临时解决它。