web-dev-qa-db-fra.com

Impossible de remplacer onCreateOptionsMenu dans ListFragment

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

Mon activité étend le ListFragment et j'ai essayé de remplacer le onCreateOptionsMenu (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 ().

C'est le message d'erreur:

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

Et j'ai fait ça avec:

Public class MyFragment extends ListFragment
28
Waza_Be

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

55
Maria Neumayer

OK, je viens d'avoir ce même problème, même si ce n'est pas résolu par ce qui est ici. J'utilise la bibliothèque ActionBarSherlock et il s'avère que onCreateOptionsMenu veut que Menu soit de Android.support.v4.view.Menu et MenuInflater soit de Android.view.MenuInflater, pas Android.support.v4.view.MenuInflater. Ne me demande pas pourquoi. Je ne sais pas si cela va réparer tout le monde, alors je vais partager comment j'ai compris:

Cliquez avec le bouton droit de la souris sur l'espace vide dans lequel vous souhaitez que la méthode se trouve dans Elcipse> Source> Remplacer/mettre en œuvre des méthodes ...

Ensuite, trouvez-le ici et Eclipse importera automatiquement les éléments corrects.

47
Weston

J'ai eu un problème similaire en utilisant le SherlockActionBar sur mon activité. Voici ma configuration qui a résolu 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;
    }

...


}
26
Chris Smith

Avait 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) { 
...

Devait 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

16
TouchBoarder

Aie!!! C'était un bon!

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

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

7
Waza_Be

Essayez ceci, en fait IDE a confondu l'importation de menu natif bw et l'importation de Sherlock ... de sorte que si nous le spécifions clairement, cela sera résolu .. 

@Override
    public void onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu,
            com.actionbarsherlock.view.MenuInflater inflater) {

}

@Override
    public boolean onOptionsItemSelected(
            com.actionbarsherlock.view.MenuItem item) {
        // TODO Auto-generated method stub

}
2
Bala Vishnu
@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
    // TODO Auto-generated method stub
    getSupportMenuInflater().inflate(R.menu.main, menu);
    return true;
}
1
RZMars

Juste le même problème dans une activité sur Xamarin . Il s'attendait à ce que la méthode prenne Xamarin.ActionbarSherlockBinding.Views.IMenu en argument.

Comment savoir: - Commenter la méthode OnCreateOptionsMenu Vous avez commencé à implémenter .- Dans une méthode de travail, commencez à taper OnCreateOptionsMenu comme vous voulez l'appeler .- Choisissez-le dans la liste de suggestions . -Placez un curseur sur l'appel OnCreateOptionsMenu .- appuyez sur Commande + d pour accéder au navigateur d'assemblage. Vous verrez l'interface de l'implémentation .- Ensuite, en appuyant sur le pointeur de la souris sur le type de paramètre requis, vous obtiendrez l'interface de ce type d'implémentation .- Et vous verrez l'espace de noms dans lequel il se trouve.

0
EdgarK

J'ai eu le même problème et c'est ce que j'ai fait pour utiliser onCreateOptionsMenu of Fragment . Remplacez la méthode onCreate du fragment et assurez-vous que vous utilisez la méthode setHasOptionsMenu avec la valeur du paramètre "true" pour que le système sache que Fragment utilisera OptionsMenu.

@Override
public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setHasOptionsMenu(true);
}

Puis remplacez onCreateOptionsMenu pour gonfler votre fichier xml de menu (ici, dans cet exemple, j'ai gonflé fragmentmenu.xml

@Override
public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) {
     inflater.inflate(R.menu.fragmentmenu, menu);
}
0
Debashis