下部ナビゲーションビューの項目が選択されるとフラグメントが再作成されます 質問する

下部ナビゲーションビューの項目が選択されるとフラグメントが再作成されます 質問する

以下は、下部ナビゲーションビュー項目が選択された場合のコードです。

bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {  
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    Fragment fragment = null;
    switch (item.getItemId()) {
        case R.id.action_one:
            // Switch to page one
            fragment = FragmentA.newInstance();
            break;
        case R.id.action_two:
            // Switch to page two
            fragment = FragmentB.newInstance();
            break;
        case R.id.action_three:
            // Switch to page three
            fragment = FragmentC.newInstance();
            break;
    }
    getSupportFragmentManager().beginTransaction().replace(R.id.container,fragment,"TAG").commit();
    return true;
}
});

今、私の問題は、フラグメントが再作成されるたびに、フラグメントが再作成されることを望まないことです。addToBackStack(null) の追加も試みましたが、この場合、戻るボタンを押すと、スタックから不要なフラグメントがポップされ続けます。

フラグメントを再作成せずに、選択した下部ナビゲーションバーにフラグメントを表示する方法はありますか

ベストアンサー1

サポートライブラリv26を使用すると、次のことができます

FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();

Fragment curFrag = mFragmentManager.getPrimaryNavigationFragment();
if (curFrag != null) {
    fragmentTransaction.detach(curFrag);
}

Fragment fragment = mFragmentManager.findFragmentByTag(tag);
if (fragment == null) {
    fragment = new YourFragment();
    fragmentTransaction.add(container.getId(), fragment, tag);
} else {
    fragmentTransaction.attach(fragment);
}

fragmentTransaction.setPrimaryNavigationFragment(fragment);
fragmentTransaction.setReorderingAllowed(true);
fragmentTransaction.commitNowAllowingStateLoss();

おすすめ記事