如何在 Android 中更改 java class 中的 MenuItem 图标?
How to change a MenuItem icon from normal java class in Android?
在我的项目中,我有一个class继承自CountDownTimer,我想在onFinish()方法中改变某个MenuItem的Icon。但是代码不起作用。
@Override
public void onFinish() {
Menu menu = newMenuInstance(context);
MenuInflater menuInflater = new MenuInflater(context);
menuInflater.inflate(R.menu.menu_main, menu);
menu.findItem(R.id.menu_work).setIcon(R.mipmap.ic_action_tick);
}
protected Menu newMenuInstance(Context context) {
try {
Class<?> menuBuilderClass = Class.forName("com.android.internal.view.menu.MenuBuilder");
Constructor<?> constructor = menuBuilderClass.getDeclaredConstructor(Context.class);
return (Menu) constructor.newInstance(context);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
除了 onCreateOptionsMenu()
方法之外,无论何时更改菜单项,都必须调用 invalidateOptionsMenu()
来刷新菜单项。
添加无效选项菜单();在设置新图标后的 onFinish() 方法中。
如果您不是从 activity 调用此函数,请记住您只能使用特定的 activity 引用调用此函数。
在我的项目中,我有一个class继承自CountDownTimer,我想在onFinish()方法中改变某个MenuItem的Icon。但是代码不起作用。
@Override
public void onFinish() {
Menu menu = newMenuInstance(context);
MenuInflater menuInflater = new MenuInflater(context);
menuInflater.inflate(R.menu.menu_main, menu);
menu.findItem(R.id.menu_work).setIcon(R.mipmap.ic_action_tick);
}
protected Menu newMenuInstance(Context context) {
try {
Class<?> menuBuilderClass = Class.forName("com.android.internal.view.menu.MenuBuilder");
Constructor<?> constructor = menuBuilderClass.getDeclaredConstructor(Context.class);
return (Menu) constructor.newInstance(context);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
除了 onCreateOptionsMenu()
方法之外,无论何时更改菜单项,都必须调用 invalidateOptionsMenu()
来刷新菜单项。
添加无效选项菜单();在设置新图标后的 onFinish() 方法中。
如果您不是从 activity 调用此函数,请记住您只能使用特定的 activity 引用调用此函数。