gpt4 book ai didi

android - 导航组件生命周期

转载 作者:行者123 更新时间:2023-12-03 13:25:33 26 4
gpt4 key购买 nike

我已经尝试了一段时间的导航组件,但不知何故没有得到当前导航组件生命周期背后的原因(或解释)。这里有一些需要澄清的地方。
1. fragment 到 fragment 流
在导航组件中,每次访问(或重新访问)时都会重新创建每个 fragment (或者说页面)。所以,当你在 A并转到 B , A被破坏,稍后当您返回 A 时(如按返回键)A是从拉伸(stretch)创建的。
在传统的 Activity 模式中,当您返回 A它只是转到onResume因为它在移动到 B 时没有被破坏.导航组件中更改此模式的任何原因?
重新创建的问题是当您有大量数据并且需要时间来重新绘制并且感觉应用程序卡住时。一个例子是简单的主页(比如 Facebook NewsFeed)。可以使用 ViewModel 处理保存数据但是再次绘制所有提要需要时间,并且会卡住。
娱乐还产生了另一个问题。假设这种情况:A有一个 Collapsing AppBarNestedScrollView .用户向下滚动并 AppBar将折叠,然后用户移动到不同的页面 B .当他回到 A它将被重新绘制和AppBar被扩展。我不确定这是一个错误还是我应该做些什么来修复它?因此,这里的任何解决方案也受到欢迎。
2. Activity 休闲
如果由于某些原因(例如方向更改)重新创建 Activity ,导航组件中的每个页面都会重新创建,直到当前目的地。虽然 onCreate fragment 的方法不是 onCreateView被调用,我看不到在 Activity 娱乐中创建 fragment 的意义。欢迎任何解释。

最佳答案

导航组件目前仅支持 fragment 替换。因此,您将无法像使用手动 fragment 事务那样添加() fragment 。

但是,如果您担心重新膨胀布局和重新获取 fragment 的数据,则可以通过以下两种方法轻松解决。

创建 View 后,将其存储在一个变量中,并在调用 onCreateView() 时使用它。

private var view: View? = null

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

if (view == null) {
view = inflater.inflate(R.layout.fragment_list, container, false)
//...
}

return view

}

来源: https://twitter.com/ianhlake/status/1103522856535638016

将 ViewModel 与 Fragment 一起使用,并将所需的数据保存为成员变量。这样,替换关联的fragment时,数据不会被清除。 ViewModel 仅在 fragment 的 onDestroy() 上被清除,这只会在您销毁父 Activity 时发生。 https://developer.android.com/images/topic/libraries/architecture/viewmodel-lifecycle.png

关于android - 导航组件生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56749113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com