График навигации, обновляющий текущие пункты меню ящика

Я знакомлюсь с Navigation graphapis. У меня есть приложение, в котором есть ящик, и несколько фрагментов, которые я показываю вNavHostFragment используя navigation 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 это проверка или not checked, с фрагментом навигации происходит то, что происходит всякий раз, когда пользователь нажимает кнопку 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 ответов

Другие вопросы по тегам