【问题标题】:Update NavigationView state when user goes back to previous fragment当用户返回上一个片段时更新 NavigationView 状态
【发布时间】:2015-07-27 12:55:49
【问题描述】:

我在我的应用程序中使用 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 状态(检查正确的片段、更改标题等),以便它可以反映我的应用中的更改?

【问题讨论】:

    标签: android fragment navigationview


    【解决方案1】:

    您应该使用 addToBackStack 方法实现返回导航。看看this

    【讨论】:

    • 这仅回答何时更新的问题。我也可以使用 onBackPressed()。主要问题是应该在抽屉中突出显示哪个位置?
    • 查看第一个答案link
    【解决方案2】:

    我创建了一个解决方法:创建抽屉或单击 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 代码)

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

    【讨论】:

    • 这仅适用于第一次返回,如果我打开 3 个菜单项然后按两次返回不起作用
    猜你喜欢
    • 2021-09-20
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    相关资源
    最近更新 更多