2011-10-21 18 views
28

Ho creato un'app che supporta sia la versione per telefono che per tablet, quindi utilizzo la libreria android-support-v4.jar.Impossibile eseguire l'override di onCreateOptionsMenu in ListFragment

La mia attività si estende il ListFragment e ho cercato di ignorare l'onCreateOptionsMenu (menu Menu, MenuInflater gonfiatore), come nel seguente link: http://developer.android.com/resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentMenuSupport.html

ho già chiamato setHasOptionsMenu.

Sfortunatamente, sembra che non riesca a sovrascrivere onCreateOptionsMenu().

Questo è il messaggio di errore:

Il metodo onCreateOptionsMenu (menu Menu, MenuInflater gonfiatore) di tipo MyFragment deve escludere o implementa un metodo supertipo.

E ho fatto con:

Public class MyFragment extends ListFragment 

risposta

55

Assicurarsi che le importazioni sono dalla libreria di compatibilità e non dal SDK stesso.

+0

stavo scrivendo la mia soluzione quando avete risposto ;-) Hai ragione, che è stato il problema. Grazie. –

+9

Se si arriva a questa domanda cercando su google lo stesso errore per ActoionBarSherlock, si applica la stessa soluzione. Rimuovere la dichiarazione di importazione del menu e reimportare il menu da ABS. Il sostituto getMenuInflater di getSupportMenuInflater. – Snicolas

+1

Giusto per essere più chiaro: è necessario sovrascrivere il metodo che utilizza le classi Menu sherlock, invece di quelle sdk. Usa anche getSupportMenuInflater() per gonfiare il menu lib. –

6

Ouch !!! E 'stato bello!

Ho importato android.view.Menu in MyFragment invece di android.support.v4.Menu!

Ho perso alcune ore su questo! Spero che questo post possa almeno aiutare qualcun altro.

46

OK, ho appena avuto lo stesso problema, anche se non è stato risolto da ciò che è qui. Sto usando la libreria ActionBarSherlock e si scopre che onCreateOptionsMenu vuole Menu per essere da android.support.v4.view.Menu e MenuInflater per essere da android.view.MenuInflater, non android.support.v4.view.MenuInflater. Non chiedermi il perché. Non so se questo risolverà tutti, quindi condividerò come l'ho capito:

Fai clic con il pulsante destro del mouse sullo spazio vuoto in cui desideri che il metodo si trovi in ​​Elcipse> Sorgente> metodi Overide/Implement. ..

Quindi basta trovarlo da qui ed Eclipse importa automaticamente le cose corrette.

+17

Nota: se si desidera utilizzare l'inflater, è necessario scambiare 'getMenuInflater()' con 'getSupportMenuInflater()'. – Grimmace

+0

Nel mio caso ho dimenticato di estendere SherlockFragment invece Fragment. –

+0

Dovrai anche assicurarti che la tua attività principale estenda l'ABS in questo modo: "la classe pubblica MainActivity estende SherlockActivity {" – Britc

-1

ho usato ho usato com.actionbarsherlock.view.Menu - forse è cambiato da allora?

26

Ho avuto un problema simile utilizzando SherlockActionBar sulla mia attività. Qui è stata la mia messa a punto che ha risolto il problema:

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

Grazie. 'getSupportMenuInflater()' invece di standard 'getMenuInflater()' è una decisione. –

16

aveva lo stesso problema, ma è stato perché ho usato il metodo onCreateOptionsMenu sbagliato nella mia Frammento!

booleano onCreateOptionsMenu(Menu menu) è solo per Attività.

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

dovuto spostarlo alla classe di attività che contiene il frammento.

Frammento hanno il loro: void onCreateOptionsMenu (Menu menu, MenuInflater inflater)

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

Creazione di un menu di opzioni: http://developer.android.com/guide/topics/ui/menus.html

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

Prova questa, in realtà un po 'confusa IDE bw importazione menù nativo e Sherlock import..so se noi specificarlo chiaramente quindi sarà risolto ..

@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 

} 
0

Ho appena avuto lo stesso problema in un'attività su Xamarin. si aspettava che il metodo prendesse Xamarin.ActionbarSherlockBinding.Views.IMenu come argomento.

Come scoprire: -Commenta il metodo OnCreateOptionsMenu Hai iniziato a implementare. -In qualche metodo di lavoro inizia a digitare OnCreateOptionsMenu come vuoi chiamarlo. -Scegli dalla lista dei suggerimenti. -Posizionare un cursore sulla chiamata OnCreateOptionsMenu. -press Comando + d per andare al browser dell'assieme. Vedrai l'interfaccia dall'implementazione. -Poi premendo il puntatore del mouse sul tipo di parametro che si ottiene, si otterrà l'interfaccia di questo tipo di implementazione. -And Vedrete lo spazio dei nomi è in.

0

Ho avuto lo stesso problema e questo quello che ho fatto per usare onCreateOptionsMenu di Fragment. Sostituisci il metodo onCreate di Fragment e assicurati di utilizzare il metodo setHasOptionsMenu con il valore del parametro "true" per far sapere al sistema che Fragment userà OptionsMenu.

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

Poi ignorare onCreateOptionsMenu per gonfiare il file XML menu (qui in questo esempio ho gonfiato fragmentmenu.xml

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