График навигации, обновляющий текущие пункты меню ящика
Я знакомлюсь с Navigation graph
apis. У меня есть приложение, в котором есть ящик, и несколько фрагментов, которые я показываю в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();
}
}