如何在 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 引用调用此函数。