Обработка onBackPress фрагментов при навигации между элементами BottomNavigationView - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть MainActivity, и у него есть несколько фрагментов.Я также использую BottomNavigationView. Я добавляю все фрагменты следующим образом:

 public void loadFragment(int layoutId, Fragment fragment) {
    FragmentManager manager = getSupportFragmentManager();
    manager.beginTransaction().addToBackStack(null).replace(layoutId, fragment).commit();
}

Я переопределяю onBackPressed метод MainActivity:

  @Override
public void onBackPressed() {
    int count = getFragmentManager().getBackStackEntryCount();
    if (count == 0) {
        super.onBackPressed();
    } else {

        getFragmentManager().popBackStack();
    }
    bottomNav.setVisibility(View.VISIBLE);
}

У меня есть некоторые проблемы с навигациеймежду фрагментами.Например, я нажимаю элемент один из BottomNavigationView, и мое приложение переходит к фрагменту A. Затем я нажимаю на вид фрагмента A, и он переходит к фрагменту B.Затем я нажимаю второй элемент из BottomNavigationView, и он переходит к фрагменту C. Теперь я нажимаю кнопку «Назад», и мое приложение переходит к фрагменту B, а когда я снова нажимаю кнопку «Назад», перехожу к фрагменту A.Я хочу, чтобы при переходе от элемента BottomNavigationView к другому и при нажатии кнопки назад мое приложение переходило к домашнему фрагменту, а не к фрагментам, добавленным к backStack.Как сделать эту работу?Эти коды в MainActivity:

  bottomNav.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            selectFragment(item);
            return false;
        }
    });

  private void selectFragment(MenuItem item){

    item.setChecked(true);
    int id=item.getItemId();
    switch (id){
        case R.id.nav_home: {
            loadFragment(R.id.flContent, new MainPageFragment());
            break;
        }
        case R.id.nav_my_answers: {
            if (isOnline(this)) {
                if (Config.CurrentUser != null)
                    loadFragment(R.id.flContent, new ListAnswerFragment());
                else
                    showDialog(getString(R.string.title_dialog), getString(R.string.did_not_login));
            } else {
                showDialog(getString(R.string.title_dialog), getString(R.string.no_internet));
            }
            break;
        }
        case R.id.nav_my_questions: {
            if (isOnline(this)) {
                if (Config.CurrentUser != null)
                    loadFragment(R.id.flContent, new ListQuestionFragment());
                else
                    showDialog(getString(R.string.title_dialog), getString(R.string.did_not_login));
            } else {
                showDialog(getString(R.string.title_dialog), getString(R.string.no_internet));
            }

            break;
        }
    }
}
...