28 votes

Impossible de remplacer onCreateOptionsMenu dans ListFragment

J'ai créé une application qui prend en charge les versions téléphone et tablette et j'utilise donc la bibliothèque Android-support-v4.jar.

Mon activité étend le ListFragment et j'ai essayé de surcharger le onCreateOptionsMenu(Menu menu, MenuInflater inflater), comme dans le lien suivant : http://developer.Android.com/resources/samples/Support4Demos/src/com/example/Android/supportv4/app/FragmentMenuSupport.html

J'ai précédemment appelé setHasOptionsMenu.

Malheureusement, il semble que je ne puisse pas remplacer onCreateOptionsMenu().

Voici le message d'erreur :

La méthode onCreateOptionsMenu(Menu menu menu, MenuInflater inflater) de type MyFragment doit surcharger ou implémenter une méthode supertype.

Et je l'ai fait avec :

Public class MyFragment extends ListFragment

55voto

Maria Neumayer Points 2357

Assurez-vous que les importations proviennent de la bibliothèque de compatibilité et non du SDK lui-même.

0 votes

J'étais en train d'écrire ma solution quand vous avez répondu ;-) Vous avez raison, c'était le problème. Merci.

9 votes

Si vous êtes arrivé à cette question en cherchant sur Google la même erreur pour ActoionBarSherlock, la même solution s'applique. Supprimez l'instruction d'importation du menu et réimportez le menu depuis ABS. Remplacez getMenuInflater par getSupportMenuInflater.

1 votes

Pour être plus clair : vous devez surcharger la méthode qui utilise les classes de menu sherlock, au lieu de celles du sdk. Utilisez également getSupportMenuInflater() pour gonfler le menu de la bibliothèque.

47voto

Weston Points 1000

OK, je viens d'avoir le même problème, bien qu'il n'ait pas été résolu par ce qui est ici. J'utilise la bibliothèque ActionBarSherlock et il s'avère que onCreateOptionsMenu veut Menu pour être de android.support.v4.view.Menu y MenuInflater pour être de android.view.MenuInflater pas android.support.v4.view.MenuInflater . Ne me demandez pas pourquoi. Je ne sais pas si cela va arranger tout le monde, alors je vais partager comment j'ai trouvé la solution :

Cliquez avec le bouton droit de la souris sur l'espace vide où vous voulez que la méthode soit dans Elcipse > Source > Overide/Implement methods...

Ensuite, il suffit de le trouver ici, et Eclipse importera automatiquement les éléments corrects.

17 votes

Note : Si vous voulez utiliser le gonfleur, vous devrez échanger getMenuInflater() avec getSupportMenuInflater() .

0 votes

Dans mon cas, j'ai oublié d'étendre SherlockFragment au lieu de Fragment.

0 votes

Vous devrez également vous assurer que votre activité principale prolonge l'ABS comme ceci : "public class MainActivity extends SherlockActivity {"

26voto

Smitty Points 423

J'ai eu un problème similaire en utilisant la SherlockActionBar sur mon activité. Voici ma configuration qui a permis de résoudre le problème :

import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.Menu;

public class LoginActivity extends SherlockActivity{

    ...

    @Override
    public boolean onCreateOptionsMenu(Menu menu){
        getSupportMenuInflater().inflate(R.menu.activity_login, menu);
        return true;
    }

    ...

}

1 votes

Merci. getSupportMenuInflater() au lieu de la norme getMenuInflater() est une décision.

17voto

hsigmond Points 1795

J'ai eu le même problème, mais c'est parce que j'ai utilisé la mauvaise méthode onCreateOptionsMenu dans mon fragment !

boolean onCreateOptionsMenu(Menu menu) est uniquement pour les activités.

@Override //For Activities
public boolean onCreateOptionsMenu(Menu menu) { 
...

J'ai dû le déplacer vers la classe d'activité contenant le fragment.

Les fragments ont leur propre : void onCreateOptionsMenu (Menu menu, MenuInflater inflater)

@Override //For Fragments.
public void onCreateOptionsMenu (Menu menu, MenuInflater inflater){
...

Création d'un menu d'options : http://developer.Android.com/guide/topics/ui/menus.html

7voto

Waza_Be Points 14584

Aïe ! !! C'était un bon coup !

J'ai importé Android.view.Menu dans MyFragment au lieu de Android.support.v4.Menu !

J'ai perdu quelques heures sur celui-ci ! J'espère que cet article pourra au moins aider quelqu'un d'autre.

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