因此,我在setOnClickListener
中包含了以下代码:
helpFragment = HelpFragment.newInstance()
supportFragmentManager
.beginTransaction() // Começar a transição
.replace(R.id.container, helpFragment)
.addToBackStack(helpFragment.toString())
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit() // Aplicar as alterações
}
但是问题是,每次我单击按钮时,都会实例化该片段的新实例。这样,例如,如果我在按钮中单击10次,则将有9个片段添加到Backstack中,有1个可见。如何仅创建片段的一个实例?我尝试过:
if (helpFragment == null)
但这显然行不通...
答案 0 :(得分:0)
向后堆栈添加片段将在堆栈中保留片段,以便您在需要时可以向后导航。
您仍然可以使用后堆栈,但是您必须检查是否已添加该片段,以便在堆栈中没有重复的片段实例。
例如
val helpFragment = HelpFragment.newInstance()
val isInBackstack = supportFragmentManager.findFragmentByTag(helpFragment.toString())
if (!isInBackstack) {
supportFragmentManager
.beginTransaction() // Começar a transição
.replace(R.id.container, helpFragment)
.addToBackStack(helpFragment.toString())
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit() // Aplicar as alterações
}
答案 1 :(得分:-1)
如果使用addToBackStack
,它将始终将片段保存到后堆栈。删除该行以不将片段添加到后堆栈。当事务有多个更改时使用addToBackStack
,然后将所有更改添加到堆栈中,然后按返回按钮将一个接一个地还原这些事务。
helpFragment = HelpFragment.newInstance()
supportFragmentManager
.beginTransaction() // Começar a transição
.replace(R.id.container, helpFragment)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit() // Aplicar as alterações
}
答案 2 :(得分:-1)
最好查看问题的整个代码库。您可以使用Kotlin的lazy
解决它。看看这个topic