java从嵌套片段中的backstack中删除片段
我有一个main活动,其中添加了一个片段==>;利益碎片 在BenefintsFragment中有一个相对论
<RelativeLayout
安卓:visibility="gone"
安卓:background="@安卓:color/white"
安卓:id="@+id/benefitContainer"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent">
</RelativeLayout>
我正在添加另一个片段,如
browseBtn.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
RelativeLayout mLayout = (RelativeLayout) view.findViewById(R.id.benefitContainer);
mLayout.setVisibility(View.VISIBLE);
getChildFragmentManager().beginTransaction()
.add(R.id.benefitContainer, new ConfirmPinFragment()).commitNow();
}
});
在我新的ConfirmPinFragment
中,我试图回到旧的BenefitsFragment
作为
backBtn.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
getChildFragmentManager().popBackStack();
}
});
但是,如果我尝试使用
getChildFragmentManager().beginTransaction().remove(ConfirmPinFragment.this).commitNow();
它说
java.lang.IllegalStateException: FragmentManager is already executing transactions
# 1 楼答案
使用Kotlin和片段ktx使用这个:
在你的毕业典礼上:
在你的片段中
如果您没有使用childFragmentManager请使用requirectivity()。而是支持碎片化管理r
# 2 楼答案
使用
commitNow()
时要小心,添加的片段不会添加到backstack中。有关更多信息,请参见answer和this blog post如果你想使用backstack,你应该使用
commit()
和addToBackStack()
而不是commitNow()
commitNow()
没有添加到backstack中的主要原因是commitNow()将同步执行事务,如果将其添加到backstack中,则如果存在另一个挂起的异步事务,事务可能会中断backstack顺序# 3 楼答案
您可以使用FragmentManager pop方法从FragmentTransaction添加到back状态,并从Backback中删除:
# 4 楼答案
你需要做两件事才能让它起作用。但首先,真的没有必要
commitNow()
。您需要做的第一件事是在事务期间将要返回的片段添加到后堆栈中:当您返回时,请使用
getFragmentManager()
而不是getChildFragmentManager()
,因为您实际上需要保存此片段的片段管理器。子片段管理器是管理该片段内片段的管理器希望这有帮助