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 つのフローでは問題があります。
- ユーザーは新しい「子」を ChildSpecificationFrag に保存します (ツールバーの保存アイコン)。
- ユーザーが ChildrenOverviewFrag にリダイレクトされる
- ユーザーが戻るボタンを押す
- ChildrenOverviewFrag にとどまります (FinalizeFrag にリダイレクトする必要があります)
注: ボタンをもう一度押すと、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 を削除しています。私は何を間違っていますか?前もって感謝します!