来自后台的双片段实例

Double fragment instance when it comes from background

我在 OnCreate 中创建多个片段实例时遇到了问题。当我使用“主页”按钮关闭应用程序并将 return 转到该应用程序时,将再次创建片段实例。我该如何防止这种情况?

fragment = FragmentMain.newInstance(intent.extras?.getSerializable(DATA_MAIN)).also {
        supportFragmentManager.beginTransaction()
                .add(frameLayout.id, it, FragmentMain::class.java.simpleName)
                .addToBackStack(FragmentMain::class.java.simpleName)
                .commit()
               }

这是预期的行为,因为 Android 会在进程终止后重新创建添加到片段管理器的片段。

您还只是在 Android 创建的片段之上添加了第二个新片段,您可能不想这样做。

fragment = when {
    savedInstanceState == null -> FragmentMain.newInstance(intent.extras?.getSerializable(DATA_MAIN)).also {
        supportFragmentManager.beginTransaction()
                .add(frameLayout.id, it, FragmentMain::class.java.simpleName)
                .addToBackStack(FragmentMain::class.java.simpleName)
                .commit()
               }
    else -> supportFragmentManager.findFragmentByTag(FragmentMain::class.java.simpleName)
}