| |||||||
Das Thema "Fehlerhafte Selektion in der Liste" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer Benutzer Registriert seit: 06.12.2011
Beiträge: 22
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
| mich macht meine ListView noch irre . Ich versuchte nun schon einige Zeit folgendes Problem zu lösen. Habe eine Liste der eine Textview liegt. Sobald ich ein Objekt anklicke, soll sich dessen Background ändern. Das klappt auch schon alles. Aber Probleme gibt es wenn ich in meiner Liste scrollen muss. Wenn ich z.B. das erste Element selektiere und scrolle dann nach unten, ist auch automatisch das nächste sichtbare Element mit selektiert. Hier mal mein Code: Code:
Viele Grüße Butch Geändert von Butch78 (27.01.2012 um 09:33 Uhr) |
| | |
| | #3 (permalink) |
| Android Guru Modell: T-Mobile G1, Nexus One, Samsung Galaxy Tab 10.1, Samsung Galaxy Nexus Registriert seit: 04.05.2009
Beiträge: 1.599
Abgegebene Danke: 128
Erhielt 210 Danke für 193 Beiträge
|
Der View wird wiederverwendet.Änderst du also die Hintergrundfarbe, so musst du dafür sorgen, dass sie wieder zurückgeändert wird in getView(). PS: Formatiere doch die Codeschnipsel nächstes mal für bessere Lesbarkeit.
__________________ Follow/Add/Circle/Whatever me on Google+ Solitaire HD, ein Solitaire optimiert für Honeycomb. |
| | |
| | #4 (permalink) |
| Neuer Benutzer Registriert seit: 06.12.2011
Beiträge: 22
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
|
Hi, sorry hast Recht da muss ich besser aufpassen... Was genau meinst du das mit zurücksetzen in getView? Per Googlesuche hatte ich irgendwo das gleiche Problem gefunden und dort wurde gesagt mal sollte den Hintergrund in getView auf null setzen. Das habe ich bereits drin und hat aber leider keine Auswirkung gezeigt: Code:
Gruß Butch |
| | |
| | #5 (permalink) |
| Android-Hilfe.de Mitglied Modell: Nexus S Registriert seit: 30.09.2011
Beiträge: 137
Abgegebene Danke: 8
Erhielt 35 Danke für 33 Beiträge
|
else { view = convertView; } das Ding kurz vor dem Ende mein er. Wenn eine View aus dem sichtbaren Bereich rauskommt, kriegst du sie in getView als convertView wieder zum recyclen. Du setzt kurz vor Ende von getView die alte View als neue View ein die du dann zurücklieferst ohne nochmal die Hintergrundfarbe zu ändern. Wenn also die alte View die zum recyclen ankommt und eine Hintergrundfarbe gesetzt hat läuft sie unverändert durch dein Code durch. |
| | |
| | #6 (permalink) |
| Neuer Benutzer Registriert seit: 06.12.2011
Beiträge: 22
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
|
Hi, danke soweit. Jetzt werden zwar keine doppelten Items mehr selektiert, aber jetzt gehen beim scrollen leider die bereits ausgewählten Items verloren. Ich setze nun den Hintergrund der alten view zurück und übergebe die alte view dann der neuen. else { ViewHolder holder = (ViewHolder) convertView.getTag(); holder.text.setBackgroundDrawable(null); view = convertView; } Effekt nun: Ich selektiere das erste Element und scroller runter und wieder hoch => erstes Element hat die Selektion verloren. Gruß |
| | |
| | #7 (permalink) |
| Android Guru Modell: T-Mobile G1, Nexus One, Samsung Galaxy Tab 10.1, Samsung Galaxy Nexus Registriert seit: 04.05.2009
Beiträge: 1.599
Abgegebene Danke: 128
Erhielt 210 Danke für 193 Beiträge
|
OK, langsam zum mitschreiben: Der View wird recycled! DU musst dich darum kümmern, dass die Farbe für die Selektion in getView() richtig gesetzt wird und zwar für "selektiert" UND für "nicht selektiert". Woher soll das System es sonst wissen, wenn du es ihm nicht mitteilst?
__________________ Follow/Add/Circle/Whatever me on Google+ Solitaire HD, ein Solitaire optimiert für Honeycomb. |
| | |
| | #8 (permalink) |
| Neuer Benutzer Registriert seit: 06.12.2011
Beiträge: 22
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
|
Das mach ich doch schon: In meinem Clicklistener nehm ich mir das passende Element aus meiner ArrayListe und setze entsprechend den Status ( item.setKorb(0/1). Diesen Status frage ich weiter unten wieder ab und setze den Hintergrund. Code: public void onClick(View v) {
BasketItem item = mBasketList.get(position);
if(item.getKorb() == 0){
item.setKorb(1);
v.setBackgroundDrawable(getResources().getDrawable(R.drawable.strike_out));
Toast.makeText(mContext, item.getZutat(), Toast.LENGTH_LONG).show();
}else{
item.setKorb(0);
v.setBackgroundDrawable(null);
}
} Code:
|
| | |
| | #9 (permalink) |
| Android Guru Registriert seit: 09.05.2009
Beiträge: 2.389
Abgegebene Danke: 36
Erhielt 307 Danke für 289 Beiträge
|
dann mach statt null mal nen echten wert ( transparent vielleicht ) vielleicht wird null ja einfach ignoriert ?
__________________ App Entwicklung Latest apps: Media Streamer BETA | DailyCash | MoneyManager ( PRO | HD ) |
| | |
| | #10 (permalink) | |
| Android Guru Modell: T-Mobile G1, Nexus One, Samsung Galaxy Tab 10.1, Samsung Galaxy Nexus Registriert seit: 04.05.2009
Beiträge: 1.599
Abgegebene Danke: 128
Erhielt 210 Danke für 193 Beiträge
| Zitat:
Respektive fragst du deinen Korb nur ab wenn der convertView null ist, wenn er != null ist dann wird der Hintergrund einfach zurückgesetzt.
__________________ Follow/Add/Circle/Whatever me on Google+ Solitaire HD, ein Solitaire optimiert für Honeycomb. | |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Fehlerhafte Radio-Angaben in der Verbrauchsübersicht. | ArmedAnger | Samsung Galaxy S2 (I9100) Forum | 0 | 03.06.2011 18:13 |
| Netz Priorität/Selektion | ribosome | Android App Entwicklung | 2 | 07.10.2010 09:21 |
| Fehlerhafte Zeichen oder sowas in der art ^^ | isRaZZe | Motorola Milestone Forum | 11 | 10.07.2010 14:27 |
| Nach 2.1 update fehlerhafte Bluetoothverbindung mit der Kfz Bluetooth Schnittstelle | Jplent69 | Motorola Milestone Forum | 15 | 20.05.2010 08:15 |