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 )
Das TextView-Layout, das ich im Adapter verwende:
( listItem.xml )
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 )
Ich füge es zu .xml mit:
hinzu %Vor% Hintergrund zeichnungsfähig:
( background_test.xml )
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! :)
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
Verwenden Sie programmgesteuert setSelector. Zum Beispiel:
%Vor%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.
Stellen Sie den Elementstatus im Selektor wie folgt ein:
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.
Ich denke, Sie können mListView nicht in der anonymen Klasse verwenden. Sie müssen AdapterView arg0
verwenden %Vor%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%Tags und Links android xml listview android-listview listadapter