Может ли кто-нибудь сказать мне, как сделать этот код более эффективным и чтобы super.onBackpressed();
вызывался только один раз.
Проблема в том, что то, как я его сейчас использую, - это единственный способ, которым он работает. Верхняя часть кода предназначена для NavigationView
. Когда ящик открывается (, если он открыт), он закрывается. И вторая часть - изменить значки в BottomNavigationView
, чтобы они соответствовали фрагменту, на котором находится пользователь, когда он нажимает кнопку Android назад. Проблема с этим способом заключается в том, что изображения возвращаются дублированными, когда я нажимаю кнопку Android назад.
Я пробовал разными способами получить только один super.onBackPressed();
, но, как я уже упоминал ранее, если я избавьтесь от любого из них, страница не меняется.
Также пробовал менять значки в BottomNavigationView
в onResume();
в разных фрагментах. Но почему-то приложение потом зависает и закрывается.
Как у меня сейчас. Изображения возвращаются дублированными
@Override
public void onBackPressed() {
if (mDrawer.isDrawerOpen(GravityCompat.START)) {
mDrawer.closeDrawer(GravityCompat.START);
}
super.onBackPressed();
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
if (fragment instanceof HomeFragment) {
mBottomNavigationView.setSelectedItemId(R.id.nav_home);
} else if (fragment instanceof AttendingEventFragment) {
mBottomNavigationView.setSelectedItemId(R.id.nav_save);
} else if (fragment instanceof NotificationsFragment) {
mBottomNavigationView.setSelectedItemId(R.id.nav_notifications);
} else if (fragment instanceof ProfileFragment) {
mBottomNavigationView.setSelectedItemId(R.id.nav_profile);
}
super.onBackPressed();
}
Другие способы, которыми я пытался реализовать код ... Не работает ...
@Override
public void onBackPressed() {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
if (mDrawer.isDrawerOpen(GravityCompat.START)) {
mDrawer.closeDrawer(GravityCompat.START);
} else {
if (fragment instanceof HomeFragment) {
mBottomNavigationView.setSelectedItemId(R.id.nav_home);
} else if (fragment instanceof AttendingEventFragment) {
mBottomNavigationView.setSelectedItemId(R.id.nav_save);
} else if (fragment instanceof NotificationsFragment) {
mBottomNavigationView.setSelectedItemId(R.id.nav_notifications);
} else if (fragment instanceof ProfileFragment) {
mBottomNavigationView.setSelectedItemId(R.id.nav_profile);
}
}
super.onBackPressed();
}
onResume () HomeFragment; - Сделал это для всех фрагментов, и приложение просто зависает, а затем закрывается ...
@Override
public void onResume() {
super.onResume();
mBottomNavigationView = mActivity.findViewById(R.id.bottomNavigation);
mBottomNavigationView.setSelectedItemId(R.id.nav_home);
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
if (context instanceof Activity) {
mActivity = (Activity) context;
}
}
BottomNavigationView
private BottomNavigationView.OnNavigationItemSelectedListener navigationItemSelectedListener = menuItem -> {
switch (menuItem.getItemId()) {
case R.id.nav_home:
mSelectedFragment = new TabLayoutFragment();
break;
case R.id.nav_notifications:
seenNotification();
mSelectedFragment = new NotificationsFragment();
break;
case R.id.nav_profile:
SharedPreferences.Editor editor = getSharedPreferences("PREFS", MODE_PRIVATE).edit();
editor.putString("profileid", Objects.requireNonNull(FirebaseAuth.getInstance().getCurrentUser()).getUid());
editor.apply();
mSelectedFragment = new ProfileFragment();
break;
case R.id.nav_save:
mSelectedFragment = new AttendingEventFragment();
break;
}
if (mSelectedFragment != null) {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, mSelectedFragment, null).addToBackStack(null).commit();
}
return true;
};