1. ホーム
  2. Android

リターンスタックpopBackStack()のAndroidフラグメント、リターンonResumeの問題

2022-02-14 09:19:30
<パス

Fragmentを使用する場合、リターンスタックにフラグメントを追加することがある

mgrFragment.beginTransaction().add(R.id.fl_home, frgNearby).addToBackStack(null).commitAllowingStateLoss();

しかし、フラグメントのonResumeで何かをする必要があるとき、元のフラグメントへの復帰はonResumeメソッドを取らないことに気づきます。これは、popBackStack()がスタック上に既に存在するフラグメントに状態を復元しているためです。

では、後続のフラグメントの状態が復元されたときに、後続のフラグメントのonResumeでデータを更新したい場合はどうすればいいのでしょうか。

実は、アクティビティで必要なフラグメントのリターンをリッスンすることができるのです。FragmentManagerのOnBackStackChangedListenerを使用します。詳細はコードをご覧ください。

FragmentManager mgrFragment = getSupportFragmentManager();
 mgrFragment.addOnBackStackChangedListener(getListener());
        mgrFragment.beginTransaction().add(R.id.fl_home, frgNearby).addToBackStack(null).commitAllowingStateLoss();


----------



private FragmentManager.OnBackStackChangedListener getListener() {
        FragmentManager.OnBackStackChangedListener result = new FragmentManager.OnBackStackChangedListener() {
            public void onBackStackChanged() {
                FragmentManager manager = getSupportFragmentManager();

                if (manager ! = null) {
                    Fragment currFrag = (Fragment) manager.findFragmentById(R.id.fl_home);

                    currFrag.onResume();
                }
            }
        };

        return result;
    }

これで終わりです。私たちのフラグメントonResumeは、私たちが戻ったときに再び行くことがわかります。