2016-04-14 3 views
2

В моем проекте у меня есть класс, унаследованный от CountDownTimer, и я хочу изменить определенный значок MenuItem в методе onFinish(). Но код не работал.Как изменить значок MenuItem из обычного класса Java в Android?

@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; 
} 
+0

Добавить invalidateOptionsMenu(); в методе onFinish() после установки нового значка –

+0

Привет Ясир, мой класс CountDownTimer не является внутренним классом активности или фрагмента, есть ли способ использовать метод invalidateOptionsMenu() вне активности? – KevinWang

+0

Вы можете вызвать эту функцию только с этим конкретным действием referecnce –

ответ

1

Добавить invalidateOptionsMenu(); в методе onFinish() после установки нового значка.

Если вы не вызываете это из-за активности, пожалуйста, имейте в виду, что вы можете вызвать эту функцию только с этой конкретной ссылкой на действие.

+0

Если я решил ваши проблемы, пожалуйста, примите ответ и проголосуйте :) –

0

Всякий раз, когда вы изменяете пункты меню кроме onCreateOptionsMenu() метода, вы должны вызвать invalidateOptionsMenu(), чтобы обновить пункты меню.

Смежные вопросы