2012-04-24 11 views
34

Tworzę aplikację z Menu Options. Znalazłem kilka przykładów z nim, ale każdy używa innego miejsca, gdzie nazwać super.onCreateOptionMenu() w metodzie .onCreateOptionsMenu() dzwoni super

Lista różne sposoby:

@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); 
} 

Co powinienem użyć?

Odpowiedz

29

To zależy od tego, co chcesz zrobić. Pierwszy przykład pokaże twoje menu i tylko twoje menu. Drugi, doda pierwsze menu super klasy. Ostatni doda najpierw twoje menu. Pamiętaj jednak, że menu mają również pole zamówienia, które zostanie uwzględnione w czasie renderowania.

Załóżmy, że rozszerzasz działanie, które już ma menu, ale nie chcesz, aby to menu było wyświetlane, ale inne. W takim przypadku użyłbyś pierwszego podejścia.

Inny przykład: rozszerzasz działanie, które zawiera menu i chcesz dodać kolejne menu. W takim przypadku możesz zastosować drugie lub ostatnie podejście.

3

Źródłem onCreateOptionsMenu() następująco:

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

przypadku mParent jest aktywność dominującą bieżącego działania. Jeśli twoja aktywność rozszerza się na android.app.Activity, możesz po prostu wrócić na koniec true i nie martwić się o wywołanie super, ponieważ domyślna implementacja spróbuje wyświetlić menu oparte na aktywności nadrzędnej, której prawdopodobnie nie chcesz.