ActionBarSherlock: Programmiert / verdeckt Action Item-Buttons über einen Methodenaufruf

8

Ich verwende ActionBarSherlock. Ich möchte in der Aktionsleiste in Reaktion auf eine bestimmte Benutzeroperation zwei Schaltflächen anzeigen können. Die Benutzeroperation hat keinen Bezug zur Aktionsleiste. Die Sichtbarkeit der Schaltflächen muss durch Aufruf einer Methode kontrolliert werden. Antworten auf das Klicken auf diese Schaltflächen sollten auch von meinem eigenen Anwendungscode gehandhabt werden.

Die Schaltflächen sollten idealerweise genau so aussehen, wie sie beim Definieren von Menüeinträgen als Aktionselemente mit android:showAsAction="ifRoom|withText" aussehen, wie in hier .

Mein Problem ist, dass, soweit ich das beurteilen kann, die Standard-API ActionBar keinen Mechanismus zum Ein- oder Ausblenden von Action-Item-Buttons zur Verfügung stellt und die Menüpunkte nur innerhalb von onCreateOptionsMenu() definiert werden können. das wird natürlich vom System aufgerufen.

Ich bin der Überzeugung, dass ich nur solche Schaltflächen hinzufügen und sie nach Belieben ein- und ausblenden kann, indem ich ein benutzerdefiniertes Layout für sie anlege und .setCustomView() verwende, um sie in die Aktionsleiste zu platzieren. Würden die Leute generell damit einverstanden sein, oder gibt es etwas, das ich vermisst habe?

Wenn ich den Pfad zur Verwendung von .setCustomView() herunterfahre, möchte ich, dass meine Schaltflächen mit Aktionselementschaltflächen identisch aussehen, die ActionBarSherlock für ein Menüelement mit dem Attribut android:showAsAction="ifRoom|withText" anzeigt. Kann mir dazu jemand empfehlen, welches bestimmte Thema, welcher Stil oder welche Layouts in der ActionBarSherlock-Bibliothek verwendet werden sollten? Ich habe bereits versucht, R.layout.abs__action_menu_item_layout zu verwenden, aber der Versuch, dieses Layout aufzublasen, erzeugt eine Ausnahme bezüglich colorStateList , wenn versucht wird, die CapitalizingButton , die das Layout enthält, zu inflationieren.

    
Trevor 22.07.2012, 19:05
quelle

3 Antworten

9

Wenn Sie möchten, dass diese beiden Schaltflächen das Aussehen von Menüelementen haben, sollten Sie sie zu Menüpunkten machen. Ihre Annahme, dass Menüeinträge nur in onCreateOptionsMenu() definiert werden können, ist falsch, da es auch eine Methode namens onPrepareOptionsMenu() , das jedes Mal aufgerufen wird, bevor das Menü angezeigt wird. Zusammen mit der invalidateOptionsMenu() -Methode einer Aktivität können Sie einfach eine menu dat spiegelt den aktuellen Zustand in Echtzeit wider.

Die Alternative besteht darin, einen Verweis auf die einzelnen MenuItem -Objekte beizubehalten, da die Dokumentation angibt, dass sie speichern soll, um diese zu behalten und ihre Sichtbarkeit gegebenenfalls zu ändern. Möglicherweise müssen Sie invalidateOptionsMenu() noch aufrufen, um das Menü zu aktualisieren. Ich kann mich nicht mehr von ganz oben erinnern. ( Edit: Jake hat mich dabei besiegt)

Persönlich bevorzuge ich den ersten Ansatz, da Sie alle Menü-bezogene Logik gruppiert zusammenhalten und die Sichtbarkeit auf einer Art Staat / Modell basiert. Die zweite Option ist möglicherweise einfacher zu implementieren, abhängig von Ihrem aktuellen Code, kann aber dazu führen, dass überall Menüpunkte angezeigt werden.

    
MH. 22.07.2012, 19:28
quelle
11

Sie können setVisibility für die MenuItem Instanzen aufrufen.

In der Dokumentation heißt es: "Sie können sicher Halten Sie sich an das Menü (und alle daraus erstellten Elemente) und nehmen Sie Änderungen vor, bis das nächste Mal onCreateOptionsMenu () aufgerufen wird. "

    
Jake Wharton 22.07.2012 19:21
quelle
2

Haben Sie die Demo-Beispiele überprüft?

sie haben diese Eigenschaft dort auf "Feature schaltet".

    
android developer 22.07.2012 19:29
quelle