【问题标题】:Android - Pressing back button on fragment just re-opens the same fragmentAndroid - 在片段上按下后退按钮只会重新打开相同的片段
【发布时间】:2020-01-03 17:36:17
【问题描述】:

活动:

supportFragmentManager.beginTransaction()
                .replace(R.id.container, Fragment_1.newInstance())
                .commitNow()

我的第一个片段:

activity.supportFragmentManager.beginTransaction()
            .setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out)
            .replace(R.id.container, nextFrag, "Fragment_2")
            .addToBackStack(null)
            .commit()

按下后退按钮会打开第一个片段一秒钟,然后重新打开我要关闭的第二个片段。有人可以解释为什么会这样吗?我尝试覆盖后退按钮以弹出堆栈,但这似乎也不起作用。

override fun onBackPressed() {
    super.onBackPressed()
    supportFragmentManager?.popBackStack()
}

[编辑] 好的,经过一番调查,问题根本不是来自碎片。问题来自视图模型观察者在返回 Fragment_1 时重新执行。

viewModel.error.observe(this, Observer {
     viewModel.goFragment_2(activity!!)
})

我不确定为什么这个观察者会重新执行...

【问题讨论】:

  • 代替activity.supportFragmentManager 尝试使用childFragmentManager

标签: android android-fragments kotlin navigation fragment


【解决方案1】:

你为什么在片段中使用这段代码?

activity.supportFragmentManager.beginTransaction()
        .setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out)
        .replace(R.id.container, nextFrag, "Fragment_2")
        .addToBackStack(null)
        .commit()

在您的活动中使用。 我认为它会做得很好!

【讨论】:

  • 我正在尝试通过单击 Fragment_1 内的按钮打开 Fragment_2
猜你喜欢
  • 2021-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多