我有一个
Android应用程序,它有一个带有4个片段的NavigationView.我可以通过导航菜单在片段之间导航,当我选择另一个片段时,我将前一个片段添加到后栈以提供后退按钮功能.
我的问题是当我按下后退按钮转到上一个片段时,NavigationView仍然会将旧片段显示为所选片段.如果可能,我想将所选选项更新为屏幕上的片段.
例:
我从A开始,从NavigationView中选择B.当前屏幕为B,NavigationView将所选项目显示为B.如果按下后退按钮,我的当前屏幕再次变为A,但NavigationView将B显示为所选项目.
这是我的onNavigationItemSelected方法:
- public boolean onNavigationItemSelected(MenuItem item) {
- // Handle navigation view item clicks here.
- int id = item.getItemId();
- HomeFragment fragment = null;
- Class type = null;
- switch (id) {
- case R.id.nav_home:
- type = HomeNavigationFragment.class;
- break;
- case R.id.nav_groups:
- type = GroupsNavigationFragment.class;
- break;
- case R.id.nav_profile:
- type = ProfileNavigationFragment.class;
- break;
- case R.id.nav_messages:
- type = MessageNavigationFragment.class;
- break;
- }
- fragment = HomeFragment.newInstance(mUser,type);
- FragmentManager manager = getSupportFragmentManager();
- manager.beginTransaction().replace(R.id.fragment_container,fragment).addToBackStack("fragment" + code++).commit();
- DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
- drawer.closeDrawer(GravityCompat.START);
- return true;
- }
谢谢.
解决方法
我通过像这样重写onBackPressed修复了我的问题:
- @Override
- public void onBackPressed() {
- DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
- if (drawer.isDrawerOpen(GravityCompat.START)) {
- drawer.closeDrawer(GravityCompat.START);
- } else {
- FragmentManager manager = getSupportFragmentManager();
- if(manager.getBackStackEntryCount() > 0) {
- super.onBackPressed();
- HomeFragment currentFragment = (HomeFragment) manager.findFragmentById(R.id.fragment_container);
- if(currentFragment instanceof HomeNavigationFragment){
- mNavigationView.getMenu().getItem(0).setChecked(true);
- }
- else if(currentFragment instanceof GroupsNavigationFragment){
- mNavigationView.getMenu().getItem(2).setChecked(true);
- }
- else if(currentFragment instanceof ProfileNavigationFragment){
- mNavigationView.getMenu().getItem(1).setChecked(true);
- }
- else if(currentFragment instanceof MessageNavigationFragment){
- mNavigationView.getMenu().getItem(3).setChecked(true);
- }
- }
- }
- }