android – 按下后退按钮后重新选择正确的NavigationView菜单项

前端之家收集整理的这篇文章主要介绍了android – 按下后退按钮后重新选择正确的NavigationView菜单项前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 Android应用程序,它有一个带有4个片段的NavigationView.我可以通过导航菜单在片段之间导航,当我选择另一个片段时,我将前一个片段添加到后栈以提供后退按钮功能.

我的问题是当我按下后退按钮转到上一个片段时,NavigationView仍然会将旧片段显示为所选片段.如果可能,我想将所选选项更新为屏幕上的片段.

例:
我从A开始,从NavigationView中选择B.当前屏幕为B,NavigationView将所选项目显示为B.如果按下后退按钮,我的当前屏幕再次变为A,但NavigationView将B显示为所选项目.

这是我的onNavigationItemSelected方法

  1. public boolean onNavigationItemSelected(MenuItem item) {
  2. // Handle navigation view item clicks here.
  3. int id = item.getItemId();
  4. HomeFragment fragment = null;
  5. Class type = null;
  6. switch (id) {
  7. case R.id.nav_home:
  8. type = HomeNavigationFragment.class;
  9. break;
  10. case R.id.nav_groups:
  11. type = GroupsNavigationFragment.class;
  12. break;
  13. case R.id.nav_profile:
  14. type = ProfileNavigationFragment.class;
  15. break;
  16. case R.id.nav_messages:
  17. type = MessageNavigationFragment.class;
  18. break;
  19. }
  20. fragment = HomeFragment.newInstance(mUser,type);
  21. FragmentManager manager = getSupportFragmentManager();
  22. manager.beginTransaction().replace(R.id.fragment_container,fragment).addToBackStack("fragment" + code++).commit();
  23. DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
  24. drawer.closeDrawer(GravityCompat.START);
  25. return true;
  26. }

谢谢.

解决方法

我通过像这样重写onBackPressed修复了我的问题:
  1. @Override
  2. public void onBackPressed() {
  3. DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
  4. if (drawer.isDrawerOpen(GravityCompat.START)) {
  5. drawer.closeDrawer(GravityCompat.START);
  6. } else {
  7. FragmentManager manager = getSupportFragmentManager();
  8. if(manager.getBackStackEntryCount() > 0) {
  9. super.onBackPressed();
  10. HomeFragment currentFragment = (HomeFragment) manager.findFragmentById(R.id.fragment_container);
  11. if(currentFragment instanceof HomeNavigationFragment){
  12. mNavigationView.getMenu().getItem(0).setChecked(true);
  13. }
  14. else if(currentFragment instanceof GroupsNavigationFragment){
  15. mNavigationView.getMenu().getItem(2).setChecked(true);
  16. }
  17. else if(currentFragment instanceof ProfileNavigationFragment){
  18. mNavigationView.getMenu().getItem(1).setChecked(true);
  19. }
  20. else if(currentFragment instanceof MessageNavigationFragment){
  21. mNavigationView.getMenu().getItem(3).setChecked(true);
  22. }
  23. }
  24. }
  25.  
  26. }

猜你在找的Android相关文章