【问题标题】:How to avoid reloading of child fragment inside parent fragment on BackPressed in Android如何避免在Android中的父片段onBackPressed中重新加载子片段
【发布时间】:2022-01-16 16:22:52
【问题描述】:

我的主要片段有太多视图无法加载,因为文件中的代码行正在增加。为了避免这种情况,我决定使用子片段来分隔视图。所以现在上部视图在子片段中,其余的底部视图在主片段中。到此为止。

现在我通过单击主片段中的一个视图来打开一个新片段。当我回到主片段时,它正在重新加载子片段,因为我收到 NullPointerException 并且应用程序崩溃了。

以下是我添加子片段的方式。

 childFragmentManager.beginTransaction()
                            .replace(R.id.fragment_container, fragment)
                            .commitAllowingStateLoss()

了解更多。

我正在使用带有底部导航栏的导航。

  1. 如何避免这种情况?
  2. 在某些情况下,片段视图在返回该片段时会闪烁。如何避免?

【问题讨论】:

    标签: android kotlin android-fragments navigation


    【解决方案1】:

    对于您的第一个问题,您希望避免将片段放在 backstack 中。

     childFragmentManager.beginTransaction()
                                .replace(R.id.fragment_container, fragment)
                                .addToBackStack(null)//<-- Here
                                .commitAllowingStateLoss()
    

    对于您的第二个问题,Fragments 被销毁以节省内存,通常在您看不到它时发生。因此,重新创建过程可能需要一些时间,具体取决于视图的重量是,因此闪烁。

    阻止它闪烁的唯一方法是确保Fragment 没有执行太多操作,以至于无法无缝重新加载。

    您可以通过延迟加载较重的视图(例如列表、视频和大图像)来做到这一点。

    您也可以查看Fragment transitions。这些可以在视觉上平滑加载过程。

    这里是一些标准动画的绝佳来源。 Fragment transaction animation: slide in and slide out

    【讨论】:

    • 谢谢。我使用 add() 时的第一个问题很好。我是 Android 新手,所以我不知道应该怎么做才能避免眨眼。请稍微详细解释一下。任何链接或示例。
    • 您最好发布闪烁的Fragments 代码。这是一个优化问题,您可能在Fragment 中做的太多,无法与屏幕的其余部分同时完成,因此它会闪烁。
    猜你喜欢
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 2013-08-13
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多