web-dev-qa-db-ja.com

バックスタックの最後のフラグメントを取得します

私はこの投稿を見ましたが、ここに投稿された解決策は私のために機能していません: バックスタックで最新のフラグメントを取得してください

フラグメントを別のフラグメントに置き換えるときは、次を使用します。

FragmentManager manager = getSupportFragmentManager();
    FragmentTransaction ft = manager.beginTransaction();

    ft.replace(Android.R.id.tabcontent, fragment, tag);
    ft.addToBackStack(null);

    ft.commit();

したがって、フラグメントを検出するためにタグを使用していることに注意してください。

特に私の問題は次のとおりです。

私がfragment_A、fragment_B、fragment_Cを持っているとしましょう。私はfragment_Aまたはfragment_Bからfragment_Cにアクセスでき、呼び出しの親に応じて、特定のことを行う必要があります。したがって、バックスタックの最後のフラグメントを回復する必要があります。

私がやろうとすると:

FragmentManager fm = getSupportFragmentManager();

        for(int entry = 0; entry < fm.getBackStackEntryCount(); entry++){
            String ide = fm.getBackStackEntryAt(entry).getName();
           Log.i("TAG", "Found fragment: " + ide);
        }

Nullを取得します。代わりにgetId()を使用すると、数値が取得されるので、次のことを試してみました。

int id = fm.getBackStackEntryAt(entry).getId();
Fragment fragment = fm.findFragmentById(id);
Log.i("TAG", "Found fragment: " + fragment.getTag());

しかし、私はnullを取得します..私は他に何をすべきかわからないので、どんな助けでもありがたいです。

編集:私はこのメソッドをonBackPressed()で呼び出します{...}

15
kiduxa

BackStackEntry.getName()を使用している場合は、次のようになります。

ft.replace(Android.R.id.tabcontent, fragment, tag);
ft.addToBackStack(tag);
16
Paul Burke