用户返回上一个片段时更新NavigationView状态

时间:2015-07-27 12:55:49

标签: android fragment navigationview

我正在我的应用中使用NavigationView抽屉。如果用户按下后退按钮,我正在尝试返回上一个片段。这段代码效果很好:

@Override
public void onBackPressed() {
    FragmentManager fm = getSupportFragmentManager();        
    Fragment fr = fm.findFragmentById(R.id.flContent);

    if (fm.getBackStackEntryCount() > 0 ) {
        fm.popBackStackImmediate();
    }
    else {
        finish();
    }        
}

但我的NavigationView没有改变。如何更新NavigationView状态(检查正确的片段,更改标题等),以便它可以反映我的应用程序中的更改?

2 个答案:

答案 0 :(得分:0)

您应该使用addToBackStack方法实现Back Navigation。看看this

答案 1 :(得分:0)

我创建了一个解决方法:当创建抽屉或单击menuItem时,我将存储当前menuItem:

private void setupDrawerContent(NavigationView navigationView) {
    // Storing "home" menuItem when app starts
    storedMenuItem = navigationView.getMenu().getItem(0);

    navigationView.setNavigationItemSelectedListener(
            new NavigationView.OnNavigationItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(MenuItem menuItem) {
                    selectDrawerItem(menuItem);

                    // Storing menuItem when another item is selected
                    storedMenuItem = menuItem;

                    return true;
                }
            });
}

所以在我的onBackPressed方法中,我这样做:

  @Override
  public void onBackPressed() {
    selectDrawerItem(storedMenuItem);
  }

selectDrawerItem没有变化(我使用this代码)

我不知道它是否是一个很好的解决方案,但它运作良好。