2012-10-03 16 views
6

Ich habe mehrere Widgets in einer Ansicht, die jeweils einen eigenen ActionMode benötigen. Ich sehe, dass der ActionMode nicht automatisch abbricht, wenn der Benutzer außerhalb der Aktionsleiste tippt. Daher ist es für den Benutzer leicht möglich, einen ActionMode für ein Steuerelement zu starten, dann (in meinem Fall auf LongClick) ein anderes Steuerelement zu tippen und eine zweite ActionBar über die erste zu stapeln. Dies verursacht Programmierlogik-Chaos.Wie erkennt man, ob actionmode bereits vorhanden ist

Ich kann den aktuellen ActionMode mit einer Membervariable auf Aktivitätsniveau verfolgen und den aktuellen löschen, wenn ein neuer benötigt wird. Wie auch immer, dies macht meinen Code unordentlich zu lesen und zu warten. Außerdem würde ich es am liebsten sofort ablehnen, wenn der Benutzer auf etwas außerhalb der Aktionsleiste tippt.

Irgendwelche Vorschläge für einen guten Weg, damit umzugehen?

Antwort

6

Ich suchte vor einiger Zeit nach einer Lösung dieses Problems, und wie ich weiß, konnte man es nicht verfolgen, ohne den aktuellen Aktionsmoduszustand in einer globalen Variablen zu speichern. Ich denke jedoch nicht, dass eine Variable mit richtigem Namen Ihren Code unordentlich machen würde.

+0

Ok, aber nebenbei bemerkt, der Benutzer klickt auf einen EditText, den Sie nicht unterklassifiziert haben. Wie lehnst du die jetzt unangemessene Aktionsleiste ab? –

+0

Ok, wenn ich dich richtig verstanden habe ... Ich habe es so gemacht: implementiert globale Variable 'ActionMode mMode;', füllte es mit dem aktuellen Aktionsmodus in einer 'onCreateActionMode (...)' Methode, und rufe dann 'mMode auf .finish() 'Wenn ich den aktuellen Action-Modus beenden muss – user1049280

+0

Richtig, ich verstehe das. Aber woher weißt du, wann du finish() anrufen musst? Das heißt, es gibt viele Orte, an denen ein Benutzer klicken kann; Unterklassieren Sie jedes Objekt und suchen Sie nach MotionEvent.ACTION_DOWN und rufen Sie dann finish() auf? Das wäre sehr fehleranfällig, diese Code-Teile würden überall verstreut sein. –

Verwandte Themen