1

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 つのフローでは問題があります。

  1. ユーザーは新しい「子」を ChildSpecificationFrag に保存します (ツールバーの保存アイコン)。
  2. ユーザーが ChildrenOverviewFrag にリダイレクトされる
  3. ユーザーが戻るボタンを押す
  4. 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 を削除しています。私は何を間違っていますか?前もって感謝します!

4

2 に答える 2