Markieren Sie das ausgewählte Element in ListView auf Android

8

Ich habe eine Anwendung erstellt, die mit ListViews in Android funktioniert, und ich kann es nicht so einrichten, dass das ausgewählte (chacked) Element einen anderen Hintergrund hat. Ich verwende CHOICE_MODE_SINGLE. So sieht mein Code so aus:

Die von mir verwendete ListView:
(innerhalb layout.xml )

%Vor%

Das TextView-Layout, das ich im Adapter verwende:
( listItem.xml )

%Vor%

Hier füge ich den Adapter hinzu:

%Vor%

Ich bin sicher, dass das richtige Element beim Klick überprüft wird, denn wenn ich getCheckedItemPosition () aufrufen, gibt es den richtigen Wert zurück.

Und nun, die zwei Dinge, die ich ausprobiert habe, um das markierte Objekt hervorzuheben:

Selektor ziehbar:
( selector_test.xml )

%Vor%

Ich füge es zu .xml mit:

hinzu %Vor%

Hintergrund zeichnungsfähig:
( background_test.xml )

%Vor%

Ich füge es zu .xml mit:

hinzu %Vor%

Ich habe versucht, den Selektor und den Hintergrund zu sowohl listView.xml als auch listItem.xml hinzuzufügen, aber die einzige Sache, die sich ändert, ist die Standardhintergrundfarbe und die Farbe des Selektors, wenn das Element gedrückt (oder gehalten) wird. .
android: state_checked="true" und android: state_selected="true" scheinen nichts zu tun.

Ich kann den Hintergrund ändern, indem ich die getView () - Methode in ArrayAdapter überschreibe und setBackgroundColor () darin aufrufe, wenn die Ansicht ausgewählt ist, und zwar den Hintergrund ändert, aber auch den Selektor vollständig loswird. Außerdem mag ich es nicht wirklich, Klassen zu überschreiben, nur um eine Codezeile zu ändern, besonders wenn das gleiche auf andere Weise erreicht werden kann Also, was ich frage ist, gibt es eine Möglichkeit, markierte Objekte in ListView hervorzuheben, indem man einen Selektor oder einen Hintergrund hinzufügt, der gezeichnet werden kann, und ich mache es nur falsch, oder muss ich es anders machen.

Vielen Dank im Voraus! :)

    
Velja 03.03.2014, 18:24
quelle

7 Antworten

8

füge diese Zeile in onStart deiner Aktivität hinzu

%Vor%

wobei lv die Instanz von listView

ist

überschreiben Sie diese Methode und fügen Sie die folgenden Zeilen hinzu.

%Vor%

und ändern Sie dann in der Methode getView Ihres benutzerdefinierten Adapters die Farbe des Hintergrunds des vorherigen ausgewählten Objekts wieder auf normal zurück

    
Ravinder Bhandari 03.03.2014 18:39
quelle
5

Versuchen Sie Folgendes:

%Vor%

listitem.xml

%Vor%

list_selector.xml

%Vor%     
Luc 04.03.2014 07:44
quelle
2

Verwenden Sie programmgesteuert setSelector. Zum Beispiel:

%Vor%     
Oleksandr Bondarchuk 15.11.2015 02:17
quelle
0

Nach ein paar Stunden, in denen ich einen Fehler nach dem anderen fand (einschließlich des Selektors, der einen schmutzigen Streifen hinterließ), beschloss ich, es selbst zu tun:

%Vor%

mit dem OnItemClickListener:

%Vor%

und die Funktionen definiert als:

%Vor%

und das Listenelement XML ( res / layout / mylistitem.xml ) lautet:

%Vor%

Der Nachteil ist, dass ich nach der Änderung der Auswahl update () : Es gibt keine einfache Möglichkeit, die zuvor hervorgehobene Ansicht zu heben.

    
18446744073709551615 02.04.2015 14:00
quelle
0

Stellen Sie den Elementstatus im Selektor wie folgt ein:

%Vor%

Ich weiß nicht, warum state_checked nicht funktioniert. Zuerst dachte ich, es muss ein Checkableview sein, dann habe ich CheckedTextView ausprobiert. Funktioniert immer noch nicht.
Wie auch immer, state_activated wird das Problem lösen.

    
limmeng 30.04.2015 07:43
quelle
-1

Ich denke, Sie können mListView nicht in der anonymen Klasse verwenden. Sie müssen AdapterView arg0

verwenden %Vor%     
Rafael Ruiz Tabares 29.04.2014 15:16
quelle
-1

Dieser Beitrag hat sich für mich bewährt: Ссылка

Die ListView (in layout.xml):

%Vor%

Selektor, der gezeichnet werden kann (list_custom.xml):

%Vor%

Color.xml im Werteordner:

%Vor%     
user3572058 22.06.2015 08:22
quelle