Activity:
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.beginTransaction()
.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out)
.replace(R.id.container, nextFrag, "Fragment_2")
.addToBackStack(null)
.commit()
在您的活动中使用。 我认为它会做得很好!