AVE*_*imi 15 navigation android android-fragments android-jetpack android-architecture-navigation
我在图片库中使用导航架构,当我从片段 A 转到 B 然后返回到 A 时,再次调用这 3 个方法,这将导致我的图库重新加载,我应该在片段中加载我的数据,所以当我从 B 回到 A 我的方法没有被调用?:
诀窍是不要在 onCreateView() 中再次膨胀视图。这将再次调用您的所有生命周期事件,但这就是您维护片段状态的方式。
这是由谷歌 Android 团队的 Ian Lake 建议的。这是参考。
var binding: FragmentFeedsBinding? = null
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
if (binding == null)
binding = FragmentFeedsBinding.inflate(inflater, container, false)
return binding?.root
}
Run Code Online (Sandbox Code Playgroud)
小智 0
无论如何,片段的生命周期方法都会再次调用。您可以通过谷歌搜索如何使用片段或活动生命周期。
如何处理生命周期的主要思想包括保存视图状态、持久数据等。如果您使用片段,您可以使用保留片段:只需在图库片段中放置标志,setRetainInstance(true)系统将不会在您旋转时调用onCreate()方法onDestroy()例如,您的手机。下一步我建议您使用 2017 年推出的 AndroidArchitectureComponent您可以在此处阅读相关内容。
在您的情况下,我想您应该为片段创建 ViewModel,在 ViewModel 中加载数据并将数据放入 LiveData 对象中。此外,您应该重写片段中的 onCreate 并使片段保留(我之前刚刚描述过如何做到这一点)并在此处初始化您的 ViewModel。之后,在 onViewCreated 或 onActivityCreated 中,您需要通过 LiveData 和 ViewModel 观察数据并仅显示它而无需重新加载。
这是基本算法。类似的行为可以通过不同的方法来实现,如 MVP、RxPM、MVVM(基于 RxJava 和 RxAndroid)等。我认为在这里描述所有这些模式并不是我回答的主要目的。互联网上有很多信息(StackOverflow 上也有),只要尝试查找即可。
它的主要思想是,您应该在对象中加载一些在视图销毁时可以生存的东西,并告诉视图在视图准备好时从该对象中获取可用数据。
| 归档时间: |
|
| 查看次数: |
6094 次 |
| 最近记录: |