0

アプリケーションに 2 つのフラグメント A と B があります。メインアクティビティはフラグメント A で起動します。そのボタンを押すと、フラグメント B に置き換えます。

FragmentManager fm = getSupportFragmentManager();
B_Fragment pfrag = new B_Fragment();
pfrag.setArguments(args);
fm.beginTransaction().replace(R.id.frag_container, pfrag)
        .addToBackStack("A_Fragment").commit();

フラグメント B でボタンを押して、次を使用してフラグメント A に置き換えます。

fm.popBackStack();
fm.beginTransaction().addToBackStack("B_fragment").commit();

フラグメント A はスタックから正常にプッシュおよびポップされますが、フラグメント B はそうではありません。B_fragment が破棄され、新しいフラグメントが作成されるたびに。それで、誰かが私に欠けているものと、フラグメント B をスタックにプッシュし、同時に A をポップアウトする方法を教えてもらえますか。

4

1 に答える 1

2
FragmentManager fm = getSupportFragmentManager();
B_Fragment pfrag = new B_Fragment();
pfrag.setArguments(args);
fm.beginTransaction().replace(R.id.frag_container, pfrag).commit();

で、それFragment Bを単に置き換えてみませんかFragment A

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.pnlLeft, details);
ft.commit();

popBackStack最後のフラグメントをロードしません。スタック全体をポップするために一般的に使用されます。

fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

別のフラグメントをロードする前に

beginTransaction()
replace() Or add()
commit()

を押したらthe button in Fragment B、以下のコードを試してください。これにより、 が再ロードされますentire fragment

FragmentManager fm = getSupportFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
    fm.popBackStack();
} 
于 2013-07-17T12:14:00.247 に答える