2015-06-15 7 views
7

Sto tentando di ingrandire un menu in una classe che eredita la classe Fragment. Ecco il mio OnCreateOptionsMenu() metodo -android getMenuInflater() in una sottoclasse di frammenti - impossibile risolvere il metodo

@Override 
public boolean OnCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.forecastfragment, menu) ; 
    return true; 
} 

Ciò solleva il seguente errore:

Cannot resolve method 'getMenuInflater()'

ho provato:

MenuInflater inflater = getActivity().getMenuInflater(); 

ma poi Android Studio evidenzia @Override in rosso e afferma:

Method does not override method from its superclass

Ho anche cercato di creare un metodo getMenuInflater nella stessa classe e farlo tornare new MenuInflater(this)

public MenuInflater getMenuInflater() { 
    return new MenuInflater(this); 
} 

ma poi è gettato il seguente errore:

error: incompatible types: ForecastFragment cannot be converted to Context

error: method does not override or implement a method from a supertype

Cosa devo fare?

risposta

7

La firma del vostro onCreateOptionsMenu non guardare a destra. Date un'occhiata alla documentazione here

Date un'occhiata questo codice

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setHasOptionsMenu(true);//Make sure you have this line of code. 
} 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    // TODO Add your menu entries here 
    super.onCreateOptionsMenu(menu, inflater); 
} 
+1

Mentre il metodo consente di risolvere in modo corretto, non riesco ancora a ottenere il 'metodo non ignorare da un supertype' di andare via. –

0

di questo codice:

@Override 
public boolean OnCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.forecastfragment, menu) ; 
    final MenuItem item = menu.findItem(R.id.forecastID); 
} 

dove forecastID è l'ID della voce nel forcastfragment.xml menu. Aggiungete anche setHasOptionsMenu(true); nel vostro OnCreateView() in modo che il frammento chiamerà il metodo.

Come parte, è normale includere la parola "menu" nei nomi dei file di menu come "forecastfragment_menu.xml". Evita la confusione.

1
  • Secondo API non overriding un metodo super.
  • Non si sta chiamando il metodo corretto inflate.

È necessario utilizzare in questo modo:

@Override 
public boolean OnCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.forecastfragment, menu); 
    return true; 
}