1. ホーム
  2. android

[解決済み] バックスタックからのレジューム時のフラグメント

2022-11-27 13:12:52

質問

Android 2.2でフラグメントを使用するために互換性パッケージを使用しています。 フラグメントを使用し、バックスタックにフラグメント間の遷移を追加する場合、アクティビティの onResume と同じ動作を実現したいと思います。つまり、バックスタックからポップアウトした後にフラグメントがフォアグラウンドになる (ユーザーから見える) と、フラグメント内で何らかのコールバックが起動する (たとえば、共有 UI リソースに特定の変更を実行する) ようにしたいのです。

フラグメントフレームワーク内に組み込みのコールバックがないことを見ました。これを達成するための良い方法はありますか?

どのように解決するのですか?

より良い解決策がないため、私はこれが私のために動作するようになった。 1 つのアクティビティ (MyActivity) と、互いに置き換わるいくつかのフラグメントがあるとします (一度に表示されるのは 1 つだけです)。

MyActivityに、このリスナーを追加します。

getSupportFragmentManager().addOnBackStackChangedListener(getListener());

(ご覧の通り、私は互換性パッケージを使用しています)。

getListenerの実装です。

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

                if (manager != null)
                {
                    MyFragment currFrag = (MyFragment) manager.findFragmentById(R.id.fragmentItem);

                    currFrag.onFragmentResume();
                }                   
            }
        };

        return result;
    }

MyFragment.onFragmentResume() は "戻る" が押された後に呼び出されます。

  1. これは、すべての トランザクションをバックスタックに追加したものと仮定します( FragmentTransaction.addToBackStack() )
  2. スタックが変更されるたびに起動されます。 変化するたびに起動されます。 を格納することができます)ので 同じフラグメントに対して複数の呼び出しを受けるかもしれません。 フラグメントの同じインスタンスに対して複数の呼び出しを受けるかもしれません。