2012-04-24 3 views
34

Sto creando un'applicazione con OptionsMenu. Ho trovato alcuni esempi con esso, ma tutti utilizzano un posto diverso dove chiamare lo super.onCreateOptionMenu() nel metodo onCreateOptionsMenu().onCreateOptionsMenu() chiama super

Elenco dei modi diversi:

@Override // without super 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.mymenu, menu); 
    return true; 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.mymenu, menu); 
    return true; 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.mymenu, menu); 
    return super.onCreateOptionsMenu(menu); 
} 

Cosa dovrei usare?

risposta

29

Dipende da cosa si vuole fare. Il primo esempio posizionerà il tuo menu e solo il tuo menu. Il secondo, aggiungerà il primo menu di super-classe. L'ultimo aggiungerà prima il tuo menu. Tuttavia, tieni presente che i menu hanno anche un campo ordini, che verrà preso in considerazione al momento del rendering.

Diciamo che stai estendendo un'attività che ha già un menu, ma non vuoi che quel menu appaia ma un altro. In quel caso useresti il ​​primo approccio.

Un altro esempio: si sta estendendo un'attività con un menu e si desidera aggiungere un altro menu. In quel caso potresti usare il secondo o l'ultimo approccio.

3

La fonte per onCreateOptionsMenu() è la seguente:

public boolean onCreateOptionsMenu(Menu menu) { 
    if (mParent != null) { 
     return mParent.onCreateOptionsMenu(menu); 
    } 
    return true; 
} 

Dove mParent è l'attività principale della corrente attività. Se la tua attività si estende android.app.Activity, puoi semplicemente restituire true alla fine e non preoccuparti di chiamare lo super, poiché l'implementazione predefinita tenterà di mostrare un menu basato sull'attività padre, che probabilmente non desideri.