У меня есть 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;
}
}
}