导航图更新当前抽屉菜单项

时间:2019-09-17 16:16:40

标签: android android-fragments navigation-drawer android-navigation-graph

我熟悉Navigation graph API。我有一个带有抽屉的应用程序,还有一些使用NavHostFragmentnavigation controller中显示的片段。在导航方面,我认为它可以正常工作,但最大的问题是更新(取消当前菜单)菜单项。 使用我的旧方法,当我启动应用程序时,我将手动从menu item获取第一个NavigationView并将其设置为menuItem.setChecked(true),然后执行onNavigationItemSelected并检查被点击的项目,例如:

 @Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
    menuItem.setChecked(true);
    drawer.closeDrawers();
    int id = menuItem.getItemId();

    switch (id) {

     case myfragId:
     //Inflate fragment
    }
    return true;
}

由于片段的膨胀是manual process,因此用户再也没有机会单击过并且错误的menu item是check或not checked,对于Navigation片段,无论何时发生的情况用户单击back button会导航到上一个片段,但是右边的NavigationView menu item永远不会是checked,实际上没有项目是ever checked。我知道我需要手动执行此操作,但是我不知道该如何执行。 下面是我的代码。

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    ButterKnife.bind(MainActivity.this);
    setSupportActionBar(toolbar);


    navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.mainHostFragment);
    appBarConfiguration = new AppBarConfiguration.Builder(navHostFragment.getNavController().getGraph())
                    .setDrawerLayout(drawer)
            .setFallbackOnNavigateUpListener(() -> NavigationUI.navigateUp(navHostFragment.getNavController(), drawer))
                    .build();

    NavigationUI.setupWithNavController(navigationView, navHostFragment.getNavController());
    NavigationUI.setupActionBarWithNavController(this, navHostFragment.getNavController(), appBarConfiguration);
    navigationView.setNavigationItemSelectedListener(this);
}



  @Override
public boolean onSupportNavigateUp() {
    return NavigationUI.navigateUp(navHostFragment.getNavController(), appBarConfiguration);
}




@Override
public void onBackPressed() {
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}

0 个答案:

没有答案