46 votes

Comment faire un appel conditionnel invalidateOptionsMenu() en fonction du niveau de l'API dans Android ?

J'essaie de mettre à jour les boutons de menu de mon application chaque fois que l'on appuie sur l'un d'entre eux ; dans l'API 11+, il faut appeler invalidateOptionsMenu() pour ce faire ; puisque je veux que mon application soit compatible avec les API inférieures, comment puis-je appeler cette méthode uniquement lorsque j'utilise l'API 11+ ?

102voto

candrews Points 1316

Utilisez

ActivityCompat.invalidateOptionsMenu(Activity activity)

de la bibliothèque de compatibilité .

44voto

Czechnology Points 8031

Pour les autres qui cherchent une réponse comme moi :

Si vous utilisez ActionBarSherlock et en essayant de rafraîchir les boutons de la barre d'action sur l'API <11, au lieu de

Activity.invalidateOptionsMenu()

vous pouvez utiliser

SherlockActivity.supportInvalidateOptionsMenu() :

30voto

RicNjesh Points 412

Si vous étendez ActionBarActivity dans votre classe, vous n'avez besoin que de ceci :

supportInvalidateOptionsMenu();

7voto

urSus Points 2583

Je ne pense pas qu'il y ait besoin d'une bibliothèque de compatibilité et ainsi de suite, il suffit de faire un simple

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

Vous n'avez pas besoin de l'appeler avant le rayon de miel, car, afaik, onPrepareOptionsMenu() est appelé lorsque le bouton de menu est pressé. Cela fonctionne pour moi.

1voto

Kurtis Nusbaum Points 16073

Avez-vous essayé d'utiliser une FragmentActivity à partir de l'interface de l'utilisateur ? Paquet de soutien au lieu d'une activité normale ? Je pense que la méthode dont vous avez besoin se trouve dans FramentActivity.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X