Android 如何从片段更改菜单项图标?

Android 如何从片段更改菜单项图标?,android,android-fragments,Android,Android Fragments,如何从片段中访问菜单,然后更改其中一个菜单项的图标 我所做的是查询我的本地数据库,以查看在显示片段时是否存在某个条目。如果它确实显示一个实心图标,如果没有,则显示一个轮廓图标。在片段onCreate()方法中,您可以使用SethasOptions菜单(true)来允许片段处理与其根活动不同的菜单项。 因此,您可以在片段中执行类似的操作: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(s

如何从片段中访问菜单,然后更改其中一个菜单项的图标


我所做的是查询我的本地数据库,以查看在显示片段时是否存在某个条目。如果它确实显示一个实心图标,如果没有,则显示一个轮廓图标。

在片段
onCreate()
方法中,您可以使用
SethasOptions菜单(true)
来允许片段处理与其根
活动不同的菜单项。
因此,您可以在片段中执行类似的操作:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.menu_fragment, menu);
    // You can look up you menu item here and store it in a global variable by 
    // 'mMenuItem = menu.findItem(R.id.my_menu_item);'
}

@Override
public void onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    MenuItem menuItem = menu.findItem(R.id.menu_item_to_change_icon_for); // You can change the state of the menu item here if you call getActivity().supportInvalidateOptionsMenu(); somewhere in your code
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    // Handle actions based on the id field.
}
然后,您可以覆盖片段中的任何菜单生命周期方法:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.menu_fragment, menu);
    // You can look up you menu item here and store it in a global variable by 
    // 'mMenuItem = menu.findItem(R.id.my_menu_item);'
}

@Override
public void onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    MenuItem menuItem = menu.findItem(R.id.menu_item_to_change_icon_for); // You can change the state of the menu item here if you call getActivity().supportInvalidateOptionsMenu(); somewhere in your code
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    // Handle actions based on the id field.
}

我发现了一种比提供的答案更简单的方法:

Toolbar toolbar = requireActivity().findViewById(R.id.toolbar);
Menu menu = toolbar.getMenu();
MenuItem item = menu.findItem(R.id.item_settings);
item.setIcon(R.drawable.ic_settings);

从工具栏访问菜单。

like?关键部分正在调用
getActivity().SupportInvalidateOptions菜单()我的代码中的任意位置以刷新菜单。它工作得很好。