Поддержание BackStack в нижней навигации - PullRequest
0 голосов
/ 18 ноября 2018

Я использую bottomNavigation в моем приложении для Android. У меня есть 5 фрагментов A, B, C, D, E. Фрагмент B содержит другой фрагмент, который называется B1. Когда я нажимаю на фрагмент B1, приложение закрывается. Как я могу перейти к фрагменту B, когда нажата от фрагмента B1.

Вот мой код

 bottomNavigationView.setOnNavigationItemSelectedListener(
                item -> {
                    Fragment fragment = null;

                    switch (item.getItemId()) {
                        case R.id.A:
                            fragment = new A();
                            break;
                        case R.id.B:
                            fragment = new B();
                            break;
                        case R.id.C:
                            fragment = new C();
                            break;

                        case R.id.D:
                           fragment = new D();
                           break;

                        case R.id.E:
                            fragment = new E();
                            break;

                    }
                    return loadFragment(fragment);

                });


private boolean loadFragment(Fragment fragment) {
    //switching fragment
    if (fragment != null) {
        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.main_fragment, fragment)
                .commit();
         return true;
    }
    return false;
}

1 Ответ

0 голосов
/ 19 ноября 2018

При открытии фрагмента B1 используйте это

private boolean loadFragmentB1(Fragment fragment) {
//switching fragment
if (fragment != null) {
    getSupportFragmentManager()
            .beginTransaction()
            .replace(R.id.main_fragment, fragment)
            .commit();
     return true;

При открытии другого фрагмента, кроме B1, используйте это

private boolean loadFragment(Fragment fragment) {
    //switching fragment
    if (fragment != null) {
        getSupportFragmentManager()
                .beginTransaction()
                .addToBackStack(null)
                .replace(R.id.main_fragment, fragment)
                .commit();
        return true;
    }
    return false;

}

И при переопределении активности onBackPressed как этот

@Override
public void onBackPressed(){
    if (getSupportFragmentManager().getBackStackEntryCount() != 0) {
        getSupportFragmentManager().popBackStack();
    } else {
        super.onBackPressed();
        finish();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...