Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何动态更改AppBar菜单图标_Java_Android_Android Menu_Android Bottomappbar - Fatal编程技术网

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中呢?