导航架构片段重载问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了导航架构片段重载问题相关的知识,希望对你有一定的参考价值。

我在图像库中使用导航架构,当我从片段A转到B然后返回到A时,再次调用这3个方法将导致我的库重新加载,我应该在片段中加载我的数据所以当我从B回到A我的方法不被调用? :

  1. OnCreateView
  2. OnViewCreated
  3. 的onResume

Step A to B

答案

无论如何,片段的生命周期方法将再次调用。您可以谷歌它如何使用片段或活动生命周期。

如何处理生命周期的主要思想包括保存视图状态,持久化数据等。如果您使用片段,您可以使用保留片段:只需在您的库片段中放置标志setRetainInstance(true),系统不会调用onCreate()onDestroy()方法例如,您将旋转手机。下一步我建议您使用2017年You can read about it here.中引入的androidArchitectureComponent

在你的情况下,我猜你应该为你的片段创建ViewModel,在ViewModel中加载数据并将数据放在LiveData对象中。此外,你应该覆盖片段中的onCreate并使片段保留(如何做,我刚才描述)并在这里初始化你的ViewModel。之后,在onViewCreated或onActivityCreated中,您需要通过LiveData和ViewModel观察您的数据,并在不重新加载的情况下显示它。

这是基本的算法。使用MVP,RxPM,MVVM(基于RxJava和RxAndroid等)的不同方法可以实现类似的行为。我想在这里描述所有这些模式并不是我回答的主要目的。互联网上有很多信息(在StackOverflow上)也试着找到它。

它的主要思想是你应该在对象中加载某些东西,这些东西可以在视图破坏时存活,并且只是在视图准备好的时候向视图说明从该对象获取可用数据。

另一答案

navigate(...)Fragment.instantiate(...)使用FragmentNavigator实现。在提供的示例中,我建议调用popBackStack()返回上一个片段而不是navigate(...)

以上是关于导航架构片段重载问题的主要内容,如果未能解决你的问题,请参考以下文章

使用导航架构组件添加(而不是替换)片段

Jetpack 组成没有片段的导航架构?

如何使用导航架构组件从片段中获取结果?

在 FAB 单击时导航到片段(导航架构组件)

条件片段和导航重用

导航架构组件 - 导航抽屉