我试图执行以下操作:
这是MainActivity中的一种方法:
private fun addBrowseBooksFragment() {
var browseBooksFragment = BrowseBooksFragment()
val fragmentManager = fragmentManager
val fragmentTransaction = fragmentManager.beginTransaction()
if ((fragmentManager.findFragmentByTag("BrowseBooksFragment")) != null){
browseBooksFragment = fragmentManager.findFragmentByTag("BrowseBooksFragment") as BrowseBooksFragment
println("working fine up to here")
if (browseBooksFragment.isAdded) {
println("Showing Added Fragment")
browseBooksFragment.setCallBackInterface(this)
fragmentTransaction.show(browseBooksFragment)
}
} else {
browseBooksFragment.setCallBackInterface(this)
fragmentTransaction.replace(R.id.fragmentContainer, browseBooksFragment, "BrowseBooksFragment")
}
fragmentTransaction.commit()
}
else
工作正常,因为片段A加载没有问题。片段B也可以毫无问题地加载。但是当我单击按钮返回到片段A时,browseBooksFragment.isAdded
返回false,但browseBooksFragment
不为空。它按标签返回片段。
我试图避免通过不使用replace
来重新创建整个片段,而是使用show
。
我应该补充一点,如果我注释掉isAdded
条件并将show
更改为replace
,我会收到片段已添加例外。
// if (browseBooksFragment.isAdded) {
println("Showing Added Fragment")
browseBooksFragment.setCallBackInterface(this)
fragmentTransaction.replace(R.id.fragmentContainer, browseBooksFragment, "BrowseBooksFragment")
// fragmentTransaction.show(browseBooksFragment)
// }
如何正确显示已添加的片段A?
答案 0 :(得分:3)
而不是replace()
,您应该使用add()
。这样您就不会替换现有的片段,而是将片段B推送到片段A的顶部。
对于前。
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction()
.add("id of your fragment container", fragment, fragment.class.getSimpleName())
.addToBackStack(fragment.class.getSimpleName())
.commit();
这样,如果你想加载以前的片段,你只需要做
fm.popBackStack();
这将从BackStack弹出片段B,显示先前创建的片段A.