来自后台的双片段实例
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)
}
我在 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)
}