Ich habe eine Aktionsleiste mit einem Menüpunkt. Wie kann ich diesen Menüpunkt aus-/einblenden?
Das ist es, was ich zu tun versuche:
MenuItem item = (MenuItem) findViewById(R.id.addAction);
item.setVisible(false);
this.invalidateOptionsMenu();
Ich habe eine Aktionsleiste mit einem Menüpunkt. Wie kann ich diesen Menüpunkt aus-/einblenden?
Das ist es, was ich zu tun versuche:
MenuItem item = (MenuItem) findViewById(R.id.addAction);
item.setVisible(false);
this.invalidateOptionsMenu();
Erhalten Sie eine MenuItem
auf ein solches Element verweist, rufen Sie setVisible
um die Sichtbarkeit anzupassen, und rufen Sie dann invalidateOptionsMenu()
auf Ihre Aktivität, damit das Menü der Aktionsleiste entsprechend angepasst wird.
Aktualisierung: A MenuItem
ist keine normale Ansicht, die Teil Ihres Layouts ist. Es ist etwas Besonderes, etwas völlig anderes. Ihr Code gibt zurück null
para item
und das ist die Ursache für den Absturz. Was Sie stattdessen tun müssen, ist zu tun:
MenuItem item = menu.findItem(R.id.addAction);
Hier ist die Reihenfolge, in der Sie anrufen sollten: erster Aufruf invalidateOptionsMenu()
und dann innen onCreateOptionsMenu(Menu)
einen Verweis auf das MenuItem erhalten (durch Aufruf von menu.findItem()
) und rufen setVisible()
darauf
Ich habe einen Nachtrag zu dieser Frage gefunden:
Wenn Sie die Sichtbarkeit Ihrer Menüeinträge unterwegs ändern möchten, müssen Sie nur eine Membervariable in Ihrer Aktivität setzen, um sich daran zu erinnern, dass Sie das Menü ausblenden möchten, und die invalidateOptionsMenu()
und verstecken Sie die Elemente in Ihrem überschriebenen onCreateOptionsMenu(...)
Methode.
//anywhere in your code
...
mState = HIDE_MENU; // setting state
invalidateOptionsMenu(); // now onCreateOptionsMenu(...) is called again
...
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// inflate menu from xml
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.settings, menu);
if (mState == HIDE_MENU)
{
for (int i = 0; i < menu.size(); i++)
menu.getItem(i).setVisible(false);
}
}
In meinem Beispiel habe ich alle Elemente ausgeblendet.
Ja.
invalidateOptionsMenu()
wenn Sie die Option ausblenden möchten. Dies führt zum Aufruf onCreateOptionsMenu()
.onCreateOptionsMenu()
auf das Flag/die Bedingung prüfen und anzeigen oder auf folgende Weise ein- oder ausblenden:MenuItem item = menu.findItem(R.id.menu_Done); if (flag/condition)) { item.setVisible(false); } else { }
Ich habe nach einer Antwort mit etwas mehr Kontext gesucht. Jetzt, wo ich es herausgefunden habe, werde ich diese Antwort hinzufügen.
Standardmäßig ist die Schaltfläche zum Teilen ausgeblendet, wie durch android:visible="false"
.
main_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<!-- hide share button by default -->
<item
android:id="@+id/menu_action_share"
android:icon="@drawable/ic_share_white_24dp"
android:visible="false"
android:title="Share"
app:showAsAction="always"/>
<item
android:id="@+id/menu_action_settings"
android:icon="@drawable/ic_settings_white_24dp"
android:title="Setting"
app:showAsAction="ifRoom"/>
</menu>
Die Schaltfläche "Teilen" kann jedoch optional in Abhängigkeit von einer Bedingung angezeigt werden.
MainActivity.java
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
MenuItem shareItem = menu.findItem(R.id.menu_action_share);
// show the button when some condition is true
if (someCondition) {
shareItem.setVisible(true);
}
return true;
}
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.