Android invalidateOptionsMenu () für API <11

76

Ich habe verwendet, ActivityCompat.invalidateOptionsMenu(MainActivity.this);damit mein Menüpunkt "Aktualisieren" automatisch aktiviert / deaktiviert werden kann, ohne dass die Option "Menü" berührt werden muss (stellen Sie sich vor, der Benutzer lässt das Menü offen ... Ich brauche den Menüpunkt "Aktualisieren", um automatisch zu deaktivieren und sich selbst aktivieren).

Das ActivityCompat.invalidateOptionsMenu(MainActivity.this)funktioniert gut in Android 11+. Aber was kann ich für Android API <11 verwenden? : S Ich habe so viel gesucht, aber ich kann keine Antwort finden. Kann mir bitte jemand dabei helfen?

Dies funktioniert gut in Android API 11+ mit onPrepareOptionsMenuund ActivityCompat.invalidateOptionsMenu(MainActivity.this). Das Problem besteht darin, es in der Android-API <11 zu erledigen.

Hier ist meine onPrepareOptionsMenuMethode:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    if(menuRefreshEnable){
        menu.getItem(0).setEnabled(true);
    }
    if(!menuRefreshEnable){
        menu.getItem(0).setEnabled(false);
    }       
    return true;
}
SnitramSD
quelle
1
Ich würde vorschlagen, dass Sie Ihre Methode in etw ändern, wie @Override public boolean onPrepareOptionsMenu (Menü menu) {menu.getItem (0) .setEnabled (menuRefreshEnable); return true; }
Alexander Zhak

Antworten:

231

On- API < 11Use- supportInvalidateOptionsMenu()Methode

Alexander Zhak
quelle
5

ActivityCompat.invalidateOptionsMenu()ruft nicht zurück, onPrepareOptionsMenu();sondern aktualisiert das Menü direkt. Legen Sie einfach einige Log.d()und überprüfen Sie selbst.

Dies funktioniert bei mir (ich verwende API 8):

private Menu mMenu;
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.track_fragment, menu);
    mMenu = menu;
    }
...
private void someMethod() {
...
    if (mMenu != null) {
       MenuItem item = mMenu.findItem(R.id.new_track);
       if (item != null) {
            item.setVisible(false);
            ActivityCompat.invalidateOptionsMenu(this.getActivity());
        }
    }
...
}

Ich werde someMethod()schon vorher von mehreren Stellen aus angerufen onCreateOptionsMenu(), also muss ich nachsehen mMenu != null.

Sufian
quelle
0

Dies gibt true zurück, wenn die API über oder gleich 11 liegt und daher unterstützt wird. Vor API 11 wird das Menü gezeichnet, wenn die Menütaste gedrückt wird, sodass diese Methode nicht erforderlich ist, da sie automatisch ausgeführt wird.

AndroidPenguin
quelle
1
Ich muss die Menüelemente ohne Benutzerinteraktion mit der Menüschaltfläche aktualisieren. Stellen Sie sich vor, der Benutzer lässt das Menü offen, während meine asynchrone Aufgabe ausgeführt wird ... Mit dieser Methode werden die Menüpunkte in API 11+ automatisch aktualisiert. Wenn ich es entferne, funktioniert es nicht. Aber ich brauche noch die automatische Aktualisierung der Menüpunkte in Android API <11.
SnitramSD
2
Wenn meine asynchronen Aufgaben abgeschlossen sind, führe ich die Zeile ActivityCompat.invalidateOptionsMenu (MainActivity.this) aus. um das Menü itens zu aktualisieren. Aber es funktioniert nur in API 11+. Wie kann ich erzwingen, dass die Menüelemente in API <11 aktualisiert werden, ohne dass der Benutzer mit der Menüschaltfläche interagiert (ähnlich wie ActivityCompat.invalidateOptionsMenu (MainActivity.this); in API <11)?
SnitramSD
Ziemlich durch programmgesteuertes zweimaliges Drücken der Menütaste auf Geräten <11.
AndroidPenguin