我无法修复我使用BackStack的问题。我有3个由活动管理的片段:
我使用此代码的片段之间的导航:
private void showFragment(BabysitFragment babysitFragment, UserRequest userRequest) {
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
switch (babysitFragment) {
case CHILDREN_OVERVIEW:
toolbar.setVisibility(View.VISIBLE);
Fragment childrenSpecification = ChildrenOverviewFragment.newInstance(userRequest);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.fragment_container, childrenSpecification, BabysitFragment.CHILDREN_OVERVIEW.getSimpleName()).commit();
break;
case CHILD_SPECIFICATION:
toolbar.setVisibility(View.VISIBLE);
Fragment childSpecification = ChildSpecificationFragment.newInstance(userRequest);
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.fragment_container, childSpecification, BabysitFragment.CHILD_SPECIFICATION.getSimpleName()).commit();
break;
}
}
//Gets called by FinalizeFrag and ChildSpecificationFrag
@Override
public void onChildrenOverviewNeeded(UserRequest userRequest) {
showFragment(BabysitFragment.CHILDREN_OVERVIEW, userRequest);
}
//Gets called by ChildrenOverviewFrag
@Override
public void onChildSpecificationNeeded(UserRequest userRequest) {
showFragment(BabysitFragment.CHILD_SPECIFICATION, userRequest);
}
我希望用户能够使用其他2个片段的后退按钮返回FinalizeFrag。这适用于当前代码,但在1流程中我确实遇到了问题:
注意:当我再次按下按钮时,它会重定向到FinalizeFrag
单击关闭按钮时的代码(ChildSpecificationFragment):
if (id == android.R.id.home) {
getActivity().onBackPressed();
}
单击保存按钮时的代码(ChildSpecificationFragment):
...
userRequest.getFamilyDetails().getChildren().add(child);
getActivity().getSupportFragmentManager().popBackStackImmediate();
onChildrenOverviewNeededListener.onChildrenOverviewNeeded(userRequest, this);
正如您所看到的,我正在从BackStack中删除Fragment。我究竟做错了什么?提前谢谢!
答案 0 :(得分:2)
在执行“用户被重定向到ChildrenOverviewFrag”之前,请不要调用addToBackStack,
答案 1 :(得分:0)
我想
fragmentTransaction.addToBackStack(null);
将片段添加到后台。
public abstract boolean popBackStackImmediate (String name, int flags)
如果有弹出的东西,则返回true,否则返回false。