【问题标题】:Back From fragment B to Fragment A not working Kotlin返回从片段 B 到片段 A 不工作 Kotlin
【发布时间】:2021-12-10 14:04:13
【问题描述】:

我的 Kotlin 代码中有两个片段。 当我按下一些按钮时,第一个片段将膨胀第二个片段。 显示第二个片段并且一切正常,但是当我按下后退按钮时,电话将转到主页(应用程序已最小化),当我点击最近查看的应用程序时打开屏幕上所有打开的应用程序并选择我的应用程序(即打开的),然后应用程序返回到 Fragment Alike 它的假设。

但我不明白为什么单击后退按钮时应用程序会最小化? 我只是希望它返回到片段 A 并且不要最小化应用程序。

这是膨胀第二个片段的代码:

                    val fragment2 = details_frag()
                    val fragmentManager: FragmentManager? = fragmentManager
                    val fragmentTransaction: FragmentTransaction =
                        fragmentManager!!.beginTransaction()


                    if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {

                        fragmentTransaction.apply {
                            replace(R.id.fragSec, fragment2)
                            commit()
                        }
                    } else {
                        fragmentTransaction.apply {

                            replace(R.id.flFragment, fragment2)
                            commit()
                        }
                    }

主 Activity 中为第一个片段充气的代码是:

if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {

            supportFragmentManager.beginTransaction().apply {
                replace(R.id.fragLand, firstFrag)
                commit()
            }

            supportFragmentManager.beginTransaction()
                .add(
                    R.id.fragSec,
                    details_frag::class.java,
                    null

                ) //    .addToBackStack(null)
                .commit()


        } else {

            supportFragmentManager.beginTransaction().apply {
                replace(R.id.flFragment, firstFrag)
                commit()
            }
        }

我在这里没有看到什么不寻常的地方,一切都很好,但是当我从第二个片段转到第一个片段时,它只是最小化了我的应用程序...... (如您所见,第一个插入到 Main Activity 中,当有人单击我的代码中的某些内容时,我只是将第一个片段与第二个片段交换...)

谢谢!!!

【问题讨论】:

标签: android kotlin back onbackpressed


【解决方案1】:

您需要在FragmentTransaction 中调用addToBackstack(就像您在第二个示例中所做的那样)。这使您正在执行的当前事务(用 B 替换片段 A)成为堆栈上的新状态。然后当用户回击时,该状态可以被弹出并且事务被反转,所以你回到了片段 A 的位置。

如果您不将事务添加到后台堆栈,它将成为最新状态的一部分,即您添加 A 时 - 该状态变为“添加 A,然后将其替换为 B ”,当你弹出它时,它会回到“在你添加A之前”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    相关资源
    最近更新 更多