Java 如何动态更改AppBar菜单图标
在我的应用程序中,我想使用Java 如何动态更改AppBar菜单图标,java,android,android-menu,android-bottomappbar,Java,Android,Android Menu,Android Bottomappbar,在我的应用程序中,我想使用com.google.android.material.bottomappbar.bottomappbar视图。我想在这个视图中显示一些菜单项,为此我编写了以下代码:detailBottomAppBar.replaceMenu(R.menu.empty\u菜单),使用此代码,我可以在此视图中显示菜单项。 我想动态更改此菜单项之一的菜单图标。但我不知道我怎么能做到。 我可以用下面的代码单击listener来更改图标 detailBottomAppBar.s
com.google.android.material.bottomappbar.bottomappbar
视图。我想在这个视图中显示一些菜单项,为此我编写了以下代码:
detailBottomAppBar.replaceMenu(R.menu.empty\u菜单)代码>,使用此代码,我可以在此视图中显示菜单项。
我想动态更改此菜单项之一的菜单图标。但我不知道我怎么能做到。
我可以用下面的代码单击listener来更改图标
detailBottomAppBar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.detailMenu_favorite:
Toast.makeText(getViewContext(), "Favorite", Toast.LENGTH_SHORT).show();
item.setIcon(ContextCompat.getDrawable(getViewContext(), R.drawable.ic_search_24dp));
break;
case R.id.detailMenu_comment:
Toast.makeText(getViewContext(), "Comment", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
});
但是我不想通过单击更改此项目,我想打开活动
在没有单击侦听器的情况下更改图标
如何解决此问题?您可以在创建菜单时保存菜单变量。这样,您就可以获得所需的特定项并对其进行修改
private Menu _menu;
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.main, menu);
_menu = menu;
}
访问所需的菜单项
MenuItem item = _menu.findItem(R.id.menu_item_id);
item.setIcon(ContextCompat.getDrawable(getViewContext(), R.drawable.ic_search_24dp));
我不确定BottomAppBar的工作方式是否与其他菜单不同,但您能否显示初始化菜单的代码?您是否使用了创建选项菜单中的方法?我使用了创建选项菜单中的方法,但不适用于我!我使用了您的代码,但在MenuItem item=\u menu.findItem(R.id.detailMenu\u favorite)中显示'java.lang.NullPointerException'错误代码>代码。我使用了以下代码MenuItem item=\u menu.findItem(R.id.detailMenu\u favorite);setIcon(ContextCompat.getDrawable(getViewContext(),R.drawable.ic_search_24dp))
进入onCreate
方法。\u菜单是否为空?请记住,在尝试访问\u菜单之前,需要调用onCreateOptions菜单
。如果您要在onCreate
中更改图标,那么为什么不将该图标放在menu.xml中呢?