Ändere ListView choiceMode von singleChoice zu multipleChoiceModal

8

Ich habe eine ListView, die normalerweise singleChoice choiceMode ist. Wenn der Benutzer lange auf ein Element drückt, möchte ich in einen Aktionsmodus wechseln, in dem mehrere Elemente ausgewählt werden können, um eine Aktion für ausgewählte Elemente auszuführen.

Ich kann die ListView so konfigurieren, dass sie im singleChoice -Modus ist und der Benutzer Listenelemente auswählen kann, um ein Detailfragment daneben anzuzeigen und das Listenelement selbst in seinem aktivierten Zustand anzuzeigen.

Ich kann auch die ListView so konfigurieren, dass sie sich in multipleChoiceModal choiceMode befindet und ein langes Drücken auf ein Element startet den Aktionsmodus und erlaubt mehrere Auswahlen, aber jetzt erlaubt die ListView kein Einzelauswahl im Normalmodus (kein Aktionsmodus).

Wie kann ich eine ListView im singleChoice -Modus haben und sie dann in den multipleChoiceModal -Modus überführen, wenn ein Objekt lange gedrückt ist?

Dies ist das nächste, was ich mir vorstellen konnte:

  1. setzte die ListView auf singleChoice mode
  2. setze die OnItemLongClickListener der ListView und in diesem Listener:
    1. setze das% s% s% der Liste auf OnItemLongClickListener
    2. setze das% s% s% der Liste auf null
    3. Rufen Sie choiceMode für das Element auf, das lange gedrückt wurde.

Dieser Ansatz hat ein paar Probleme.

  1. Der Aktionsmodus wird erst gestartet, wenn ich zum zweiten Mal auf einen Gegenstand drücke.
  2. Wenn ich multipleChoiceModal in view.performClick() anrufe, erhalte ich getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); , weil diese Methode letztendlich auch versucht, den Aktionsmodus zu zerstören (aber wir sind noch nicht von der destroy zurückgekehrt).
Steve Prentice 20.04.2012, 17:52
quelle

2 Antworten

3

Ich habe das in einem meiner Programme verwendet

uns die ListView.CHOICE_MODE_MULTIPLE_MODAL dann lv.setMultiChoiceModeListener(new ModeCallBack());

%Vor%

Dies ermöglicht die einfache Auswahl eines einzelnen Listenansichtsklicks und einen langen Klick auf mehrere Auswahlmöglichkeiten. Dies wurde alles aus der ICS-Messaging-App gezogen, so dass Sie auch das durchsuchen können

    
tyczj 20.04.2012, 18:24
quelle
5

Es schien wirklich ein Problem mit diesem Wahlmodus zu sein, da es keine saubere und einfache Lösung gibt, die ich googlen könnte. HFM (habe einen Glaubensmann) und KISS (halte es einfach dumm) halfen;)

1.Starten Sie im Singlemode-Modus und setzen Sie alle Listener (dies geschieht dort, wo Sie den Listenadapter eingestellt haben)

%Vor%

2. Implementieren Sie die Schnittstellen, um zwischen den Auswahlmodi zu wechseln. Der TRICK, um es zum Laufen zu bringen, ist, außerhalb der Implementierung zurück in den Single-Choice-Modus zu wechseln, das heißt, NACHDEM du den Aktionsmodus zerstörst !! Verwenden Sie einfach ein einfaches Flag, um die CAB-Zerstörung zu markieren. Ein weiterer TRICK ist die Rückgabe von false onItemLongClick, damit der Auswahlmodus Zeit hat, um in Kraft zu treten.

%Vor%

3.Hier ist der Schalter zurück

%Vor%     
Gabriel Costea 06.05.2012 09:16
quelle