导航架构片段重载问题

问题描述 投票:4回答:2

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

  1. OnCreateView
  2. OnViewCreated
  3. 的onResume

Step A to B

android android-fragments navigation android-jetpack android-architecture-navigation
2个回答
0
投票

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

如何处理生命周期的主要思想包括保存视图状态,持久化数据等。如果您使用片段,您可以使用保留片段:只需在您的库片段中放置标志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上)也试着找到它。

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.