9 Stimmen

einen neuen menuInflater oder getMenuInflater() aus einer Aktivität erstellen?

Ich bin die Erstellung neuer Option Menü innerhalb Fragment aber nach dem Lesen http://developer.Android.com/resources/articles/avoiding-memory-leaks.html die sagte, dass es besser ist, Kontext-Anwendung als Kontext-Aktivität zu verwenden, habe ich Angst, getActivity().getMenuInflater() zu verwenden

Welches ist denn nun besser?

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    MenuInflater mInflater = new MenuInflater(getActivity().getApplicationContext());
    mInflater.inflate(R.menu.simple_menu, menu);
}

Oder die Aktivität des einen Anrufs

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    MenuInflater mInflater = getActivity().getMenuInflater();
    mInflater.inflate(R.menu.simple_menu, menu);

}

und was ist der Unterschied zwischen den beiden? oder sind beide einfach gleich?

Merci.

14voto

spatulamania Punkte 6533

Sie sind sich sehr ähnlich. Wenn man sich den Quelltext des MenuInflators ansieht, ist das einzige, wofür er den Kontext verwendet, der Zugriff auf die Ressourcendateien. Der spezifische Kontext spielt also für den MenuInflator keine Rolle.

Was Speicherlecks betrifft, so heißt es in dem von Ihnen zitierten Artikel

Der offensichtlichste [Weg zur Vermeidung von Speicherlecks] ist die Vermeidung des Escapings der Kontext außerhalb seines eigenen Bereichs

Sofern Sie den MenuInflator (oder Menu) nicht an eine andere Klasse übergeben, ist er in der Aktivität enthalten und wird nicht weitergegeben.

EDITAR

Darüber hinaus Activity.getMenuInflator() ist nur eine einfache Methode für new MenuInflator() . Tatsächlich ist dies die Methode innerhalb der Klasse Activity:

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

Normalerweise ist es besser, bequeme Methoden zu verwenden, da sie es ermöglichen, die zugrunde liegende Implementierung in zukünftigen Versionen zu ändern, ohne dass Sie Ihren Code ändern müssen. Wenn beispielsweise die obige Methode so geändert wird, dass sie eine zwischengespeicherte Instanz zurückgibt, anstatt jedes Mal eine neue zu erstellen.

1voto

Display Name Punkte 7774

Sie sollten Folgendes verwenden MenuInflater Instanz, die an die Methode übergeben wird public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) (beachten Sie das 2. Argument)
Es gibt keinen wirklichen Unterschied, denn normalerweise "vergisst" man sie, sobald man sie nicht mehr benutzt, aber warum sollte man eine erstellen, wenn man bereits eine aus den Argumenten hat?

0voto

Kapil Bansal Punkte 168

Ändern Sie dies:

MenuInflater inflater = getMenuInflater();

Zu diesem:

MenuInflater inflater = getActivity().getMenuInflater();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X