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 onPrepareOptionsMenu
und ActivityCompat.invalidateOptionsMenu(MainActivity.this)
. Das Problem besteht darin, es in der Android-API <11 zu erledigen.
Hier ist meine onPrepareOptionsMenu
Methode:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if(menuRefreshEnable){
menu.getItem(0).setEnabled(true);
}
if(!menuRefreshEnable){
menu.getItem(0).setEnabled(false);
}
return true;
}
Antworten:
On-
API < 11
Use-supportInvalidateOptionsMenu()
Methodequelle
ActivityCompat.invalidateOptionsMenu()
ruft nicht zurück,onPrepareOptionsMenu();
sondern aktualisiert das Menü direkt. Legen Sie einfach einigeLog.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 angerufenonCreateOptionsMenu()
, also muss ich nachsehenmMenu != null
.quelle
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.
quelle