使用 Jetpack 的 Android 导航组件销毁/重新创建的片段

2023-11-29

我正在尝试实施使用 Jetpack 架构组件进行导航在我现有的应用程序中。

我有一个活动应用程序,其中主要片段(ListFragment) 是一个项目列表。目前,当用户点击列表项时,第二个片段将添加到堆栈中fragmentTransaction.add(R.id.main, detailFragment)。所以当按下背部时DetailFragment是分离的并且ListFragment再次显示。

通过导航架构,这是自动处理的。它不是添加新片段replaced,因此片段视图被破坏,onDestroyView()被称为和onCreateView()当按下返回键重新创建视图时调用。

我知道这是一个很好的模式LiveData and 视图模型以避免使用不必要的内存,但在我的情况下,这很烦人,因为列表具有复杂的布局,并且膨胀它会消耗时间和 CPU,还因为我需要保存列表的滚动位置并再次滚动到用户离开片段的相同位置。这是可能的,但似乎应该存在更好的方式。

我尝试将视图“保存”在片段的私有字段中并在onCreateView()if 已经存在,但它似乎是一种反模式。

private View view = null;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

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

    return view;
}

还有其他更优雅的方法来避免布局重新膨胀吗?


Ian Lake谷歌回复我说我们可以将视图存储在变量中 and instead膨胀一个新的布局,就回来的实例预存视图 on onCreateView()

Source: https://twitter.com/ianhlake/status/1103522856535638016

泄漏金丝雀可能会将其显示为泄漏,但其假阳性..

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Jetpack 的 Android 导航组件销毁/重新创建的片段 的相关文章