Я хотел бы изменить пункты меню, отображаемые в моем ActionBar
, в зависимости от текущего назначения моего NavController
. Под «изменением» я подразумеваю раздувание указанного меню-XML для каждого пункта назначения.
Поведение можно сравнить с интегрированным способом, которым новая навигационная система изменяет заголовок ActionBar
, в зависимости от заданного android:label
для целевого фрагмента в xml навигации.
Пока что я настроил базовое действие с ActionBar
и DrawerLayout
, используя новую навигацию Android. Также я создал все необходимые XML-файлы и фрагменты для навигации.
...
@Override
protected void onCreate(Bundle savedInstanceState)
{
...
this._drawerLayout = this.findViewById(R.id.drawer_layout);
Toolbar toolbar = this.findViewById(R.id.action_bar);
this.setSupportActionBar(toolbar);
ActionBar actionbar = Objects.requireNonNull( this.getSupportActionBar() );
actionbar.setDisplayHomeAsUpEnabled(true);
actionbar.setHomeAsUpIndicator(R.drawable.ic_menu);
NavigationView navigationView = this.findViewById(R.id.navigation_view);
navigationView.setNavigationItemSelectedListener(menuItem -> {
menuItem.setChecked(true);
this._drawerLayout.closeDrawers();
return true;
});
NavController navController = Navigation.findNavController(this, R.id.navigation_host);
NavigationUI.setupWithNavController(toolbar, navController, this._drawerLayout);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Here I inflate the ActionBar menu that is kept between all destinations.
// Instead of keeping the same menu between all destinations I want to display different menus depending on the destination fragment.
this.getMenuInflater().inflate(R.menu.actionbar_items, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch(item.getItemId())
{
case android.R.id.home:
this._drawerLayout.openDrawer(GravityCompat.START);
return true;
case R.id.appbar_search:
return true;
}
return super.onOptionsItemSelected(item);
}
Я думал об использовании отдельной панели инструментов в каждом целевом фрагменте
но я отказался от этой идеи, потому что потерял бы анимацию перехода между значком гамбургера и значком стрелки назад.
Есть ли способ добиться этого с помощью новой навигационной системы или любым другим способом?