一次膨胀片段

时间:2019-06-05 19:52:23

标签: android android-fragments kotlin

因此,我在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)

但这显然行不通...

3 个答案:

答案 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