web-dev-qa-db-ja.com

バックスタックからフラグメントをポップする方法

フラグメントAを呼び出すアクティビティBがあり、フラグメントBを呼び出すアクティビティAがあります。ユーザーがCfに戻ることができるように、Cfが呼び出されたときにBfがバックスタックに配置されるようにします。ただし、Cfで特定のボタンが押された場合、バックスタックからBfを削除したいと思います。これは可能ですか?

PopBackStack()関数があることがわかります。ただし、これがどのように機能するかについては少し混乱しています。この機能を使用しても安全ですか?別のアプリケーションからのアクティビティがバックスタックのBfの後に挿入される可能性はありますか?

また、バックスタック上のフラグメントのsavedInstanceStateを変更する方法はありますか?

エミュレータを使用してバックスタックで堅牢なテストを実行する方法がわかりません。

63
user2085335

フラグメントを名前でポップできます。バックスタックにフラグメントを追加するときに、名前を付けます。

fragmentTransaction.addToBackStack("fragB");
fragmentTransaction.addToBackStack("fragC");

次に、Fragment_Cで、名前を使用してバックスタックをポップします。つまり、fragBおよびinclude POP_BACK_STACK_INCLUSIVE

someButtonInC.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {

        FragmentManager fm = getActivity()
                .getSupportFragmentManager();
        fm.popBackStack ("fragB", FragmentManager.POP_BACK_STACK_INCLUSIVE);
    }
});
113
Archie.bpgc

BackStackからフラグメントをポップする3つの方法

  1. この行を追加するだけです

        getActivity().getSupportFragmentManager().popBackStack();
    

2.#

        getActivity().getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

3.#

    getActivity().getSupportFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

フラグメントをbackdtackからポップする簡単な方法

6
MD Khali

最初にフラグメントcontainer_viewを置き換えます。そのとき、「Later Transaction」のような名前を追加します

   getSupportFragmentManager().beginTransaction().replace(R.id.container_view, 
    profileFragment, "Profile").addToBackStack("Later Transaction").commit();

その後、バックプレスボタンで、Later Transaction名を使用してバックスタックをポップします

     int count = getSupportFragmentManager().getBackStackEntryCount();
    if(count > 1) {
     getSupportFragmentManager().popBackStack("Later Transaction", 
     FragmentManager.POP_BACK_STACK_INCLUSIVE);
    } else {
        DialogUtils.show(HomeActivity.this, 
        getString(R.string.exit_app_message), getString(R.string.alert), 
       "Yes","No", new DialogUtils.ActionListner() {
            @Override
            public void onPositiveAction() {
                finish();
            }
            @Override
            public void onNegativeAction() {
            }
        });
    }
0
abhijit rajmane