Как сделать условный вызов invalidateOptionsMenu() в зависимости от уровня API в Android?

Я пытаюсь обновлять кнопки меню моего приложения при каждом нажатии одной из них; в API 11+ нужно позвонить invalidateOptionsMenu() сделать это; так как я хочу, чтобы мое приложение было совместимо с более низкими API, как мне вызывать этот метод только при использовании API 11+?

6 ответов

Решение

Использование

ActivityCompat.invalidateOptionsMenu(Activity activity)

из библиотеки совместимости.

Для тех, кто ищет ответ, как я был:

Если вы используете ActionBarSherlock и пытаетесь обновить кнопки панели действий в API <11 вместо

Activity.invalidateOptionsMenu()

ты можешь использовать

SherlockActivity.supportInvalidateOptionsMenu():

Если вы расширяете ActionBarActivity в своем классе, тогда вам просто нужно это:

supportInvalidateOptionsMenu();

Я не думаю, что есть необходимость в библиотеке совместимости и так далее, просто сделайте простой

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    invalidateOptionsMenu(); 
}

Вам не нужно вызывать его перед сотой, так как afaik, onPrepareOptionsMenu() вызывается при нажатии кнопки меню. Меня устраивает.

Вы пытались использовать FragmentActivity из пакета поддержки вместо обычной активности? Я полагаю, что FramentActivity будет иметь метод, который вам нужен.

Я думаю, что у меня есть это... ответ был создать новый класс:

public class wrapThree {
    public void invalidate(myActivity act) {
        act.invalidateOptionsMenu();
    }
}

а затем вызвать этот метод из myActivity, если API 11+

По крайней мере, это не дает ошибок в API < 11... все равно придется тестировать его в API 11+

Другие вопросы по тегам