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

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

Ответ 2

Для других, которые ищут ответ, как я:

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

Activity.invalidateOptionsMenu()

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

SherlockActivity.supportInvalidateOptionsMenu():

Ответ 3

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

supportInvalidateOptionsMenu();

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

Я думаю, что у меня это получилось... ответ заключался в создании нового класса:

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

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

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