Я пытаюсь обновлять кнопки меню моего приложения каждый раз, когда нажимается одна из них; в API 11+ для этого необходимо вызвать invalidateOptionsMenu()
; так как я хочу, чтобы мое приложение совместимо с более низкими API-интерфейсами, как я могу назвать этот метод только при использовании api 11 +?
Как сделать условный invalidateOptionsMenu() вызов в зависимости от уровня API в Android?
Ответ 1
Использование
ActivityCompat.invalidateOptionsMenu(Activity activity)
Ответ 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 +