Android ListView ausgewählte Elemente bleiben hervorgehoben
Lesezeit: 7 Minuten
Kelta
ich habe ein XML mit zwei ListVieweine mit einer Liste von Kunden, die durch eine Auswahlabfrage (lv_cli) und die andere mit den Details des ausgewählten Kunden (lv_cli_det). Ich möchte den Client in ausgewählt lassen lv_cli während lv_cli_det Details zeigen.
Modus kann einer der folgenden sein: AbsListView.CHOICE_MODE_SINGLE, AbsListView.CHOICE_MODE_MULTIPLE, AbsListView.CHOICE_MODE_NONE (Standard)
(AbsListView ist der abstrakte Vorfahr der ListView-Klasse)
PS-Manipulationen mit onItemClick und wechselndem Ansichtshintergrund sind bankrott, weil eine Ansicht selbst ein temporäres Objekt ist. Daher dürfen Sie eine Ansicht nicht verfolgen.
Wenn unsere Liste lang genug ist, werden die mit herausgescrollten Elementen verknüpften Ansichten aus der Hierarchie entfernt und neu erstellt, wenn diese Elemente erneut angezeigt werden (mit zwischengespeicherten Anzeigeoptionen, z. B. Hintergrund). Die von uns verfolgte Ansicht ist also jetzt keine tatsächliche Ansicht des Elements, und das Ändern des Hintergrunds ändert nichts an der tatsächlichen Elementansicht. Als Ergebnis haben wir mehrere Artikel ausgewählt.
Dies sollte als Antwort akzeptiert werden. Einfach und sehr effizient.
– Chostakowitsch
28. Mai ’15 um 20:31 Uhr
Einfache und elegante Antwort!
– dunkler Ritter
2. Juni 15 um 9:21 Uhr
Obwohl andere Antworten richtig sind, ist diese sauber und einfach.
– Velval
16. Juni 15 um 5:36 Uhr
Ich möchte, dass eines der listView-Elemente standardmäßig ausgewählt ist. Wie kann ich das tun?
– Apura
14. Januar 16 um 19:08 Uhr
@AJG Wenn ich den Modus von single auf Multiple ändere, funktioniert es nicht. Es zeigt nur das zuletzt ausgewählte Element farbig an. Aber ich möchte, dass wenn ich drei Elemente auswähle, dann müssen alle drei farbig sein.
– Ajay Sharma
29. Juli 16 um 7:19 Uhr
Neoh
Um die Farbe des Listenansichtselements beim Drücken beizubehalten, fügen Sie die folgende Zeile in Ihr Listenansichtselement-Layout ein:
error: Fehler: Keine Ressource gefunden, die dem angegebenen Namen entspricht (bei ‘drawable’ mit dem Wert ‘@drawable/pressed_color’). Fehler: Fehler: Keine Ressource gefunden, die dem angegebenen Namen entspricht (bei ‘drawable’ mit dem Wert ‘@color/default_color’).
– Kelta
24. April 13 um 11:05 Uhr
Der Farbname ist nur ein Beispiel. Es zeigt, dass Sie entweder 1) ein 9-Patch-Farbbild im PNG-Format erstellen und es dann in den drawable-Ordner legen können, oder 2) die Farbe in res/values/colors.xml definieren und dann mit android:drawable=”@ aufrufen können Farbe/Ihre Farbe”. Sie müssen zuerst die colors.xml erstellen, falls sie nicht vorhanden ist.
– Neoh
24. April 13 um 11:19 Uhr
Funktioniert die erste Listenansicht richtig? Sie müssen dasselbe für die Layout-XML der zweiten Listenansicht und ihren onClickListener () tun.
– Neoh
24. April 13 um 11:40 Uhr
Ich brauche die zweite Listenansicht nicht, um sich wie die erste zu verhalten
– Kelta
24. April 13 um 11:42 Uhr
Diese Methode sollte in das offizielle Android-Dokument geschrieben werden.
– Richard
19. Januar 15 um 4:37 Uhr
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
for (int j = 0; j < adapterView.getChildCount(); j++)
adapterView.getChildAt(j).setBackgroundColor(Color.TRANSPARENT);
// change the background color of the selected element
view.setBackgroundColor(Color.LTGRAY);
});
Vielleicht möchten Sie das aktuell ausgewählte Element in einer globalen Variablen mit dem Index i speichern.
Etwas Seltsames passiert, wenn die Tastatur angezeigt wird. Es erfolgt eine Mehrfachauswahl.
– Ricardo
22. April 14 um 22:32 Uhr
Dies ist falsch, da die Listenansicht, um Speicher zu sparen, alle 10 Elemente dieselben Ansichten zu verwenden scheint (oder wahrscheinlich alle n Elemente, wobei n größer ist als die Anzahl der auf dem Bildschirm sichtbaren Elemente). Deshalb findet eine Mehrfachauswahl statt.
– Marco
24. März 15 um 21:09 Uhr
Der vereinfachte Weg ist, wenn Sie eine Listenansicht in einer XML-Datei verwenden, verwenden Sie diese Attribute in Ihrer Listenansicht.
android:choiceMode="singleChoice"
android:listSelector="#your color code"
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- State when a row is being pressed, but hasn't yet been activated (finger down) -->
<item android:drawable="@color/app_primary_color_light" android:state_pressed="true" />
<!-- Used when the view is "activated". -->
<item android:drawable="@color/app_primary_color" android:state_activated="true" />
<!-- Default, "just hangin' out" state. -->
<item android:drawable="@android:color/transparent" /></selector>
Und dann einstellen android:choiceMode="singleChoice" zu Ihrer Listenansicht.
Vergessen Sie nicht, die Zeile hinzuzufügen: android:listselector="@drawable/my_selector" in Ihrer Listenansicht!
– SMBiggs
24. Mai 16 um 21:03 Uhr
Diese Lösung funktioniert für mich in Android Kitkat 19 Vielen Dank
– Doktor Untergang
19. Dezember 18 um 11:26 Uhr
rmunn
Am Beispiel von Avinash Kumar Pankaj
View v;
dann bei der oncreate-Methode
v = new View(getActivity());
und dann die onlistitemclick-Methode, die ich geschrieben habe
public void onListItemClick(ListView listView, View view, int position,
long id) {
v.setBackgroundResource(0);
view.setBackgroundResource(R.color.green);
v = view;
}
Es hat für mich funktioniert. Danke schön.
ich ersetzte
v = new View(getActivity());
zu
v = new View(this);
und der Code hat gut funktioniert.
Es sind auch die XML-Dateien ‘colors’ und ‘bg_key’ aus den vorherigen Beispielen sowie das ListView-Attribut android:background=”@drawable/bg_key” erforderlich.
Mauro
Vergessen Sie nicht, die Zeile hinzuzufügen: android:listselector="@drawable/my_selector" in Ihrer Listenansicht!
– SMBiggs
24. Mai 16 um 21:03 Uhr
Diese Lösung funktioniert für mich in Android Kitkat 19 Vielen Dank
– Doktor Untergang
19. Dezember 18 um 11:26 Uhr
Shahin Fasihi
*Bitte stellen Sie sicher, dass sich in Ihrem Root-Layout des Listenansichtscontainers kein Ripple befindet
Zeigen Sie Ihren Code. du hast fragment verwendet oder was??
– Avinash Kumar Pankaj
24. April 13 um 10:31 Uhr
einfach umgekehrt machen. Wie codieren Sie für die Highlight-Listenansicht? Postleitzahl hier..
– Dhaval Parmar
24. April 13 um 10:32 Uhr
stackoverflow.com/a/15898103/726863
– Lalit Poptani
24. April 13 um 11:57 Uhr