在导航

时间:2016-02-08 01:56:11

标签: android android-fragments

情况

从我的主机activityA /片段A开始,我点击一个按钮启动主机activityB /片段B.片段B是一个片段,它启用片段A的过滤选项。选择选项后,用户可以按向上导航按钮返回片段A.

问题

我希望在多次导航到Fragment B时保留所选选项的状态。由于这是一个过滤选项,因此最好不要在应用程序的持续时间内将其保存在存储中(它只是过滤。不需要长时间保存信息。只需在导航之间)。

我尝试的事情

  • OnSavedInstanceState - 意识到onNavigateUpTo()/ finish()不会触发onSavedInstanceState
  • 机器人:launchmode =" singleTop" - 由于活动已从后台堆栈中完成并销毁,因此没有活动实例可用于接收新意图。
  • setRetainInstance - 活动被破坏,因此附加的片段也被破坏。

我发现的一个可能的解决方案是使用setResult并将值返回到Fragment A。然后在再次启动Fragment B时将这些值作为EXTRAs放入新的intent中。这个解决方案看起来很笨重。是否有一个更清洁的解决方案,只允许片段B“#34;记住"它的状态而不是来回传递值?

1 个答案:

答案 0 :(得分:0)

正如你所说,当用户回来时片段被破坏,所以无法获得"状态"背部。另外,从逻辑角度来看,存储状态没有意义,从平台的角度来看,不需要片段/活动。

所以要记住'片段的状态是将过滤器数据存储在其他一些变量中,并在重新启动时将其返回给它。您尝试完成的工作完全正常,即返回过滤器数据,并在重新启动时将其发送回片段。

为简化起见,您可以编写一个包含所有过滤器选项的类,并将其设为Parcelable。您可以选择将其设置为全局,以便您可能不需要跨活动发送它,但我不愿意这样做。

一个UX问题是当用户按下/返回时,通常预期用户已取消操作。我作为用户期望当我按下它时取消操作,当我按下"申请"它适用于过滤器。您可能需要重新考虑有关在背压上应用过滤器的用户体验。