Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

Fehlerhafte Selektion in der Liste

Das Thema "Fehlerhafte Selektion in der Liste" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 26.01.2012, 14:59   #1 (permalink)
Neuer Benutzer

Registriert seit: 06.12.2011
Beiträge: 22
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
Standard Fehlerhafte Selektion in der Liste

Hi Leute,

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:
public View getView(final int position, View convertView, ViewGroup parent) { View view = null; if (convertView == null) { LayoutInflater inflator = context.getLayoutInflater(); view = inflator.inflate(R.layout.condiment_list_items, null); final ViewHolder viewHolder = new ViewHolder(); //viewHolder.icon = (ImageView)view.findViewById(R.id.iv_loeschen_icon); viewHolder.text = (TextView) view.findViewById(R.id.tx_condiment_list_items); viewHolder.text.setTag(list.get(position)); viewHolder.text.setBackgroundDrawable(null); viewHolder.text.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { BasketItem item = (BasketItem) v.getTag(); 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); } } }); viewHolder.text.setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View v) { ArrayList<BasketItem> list = new ArrayList<BasketItem>(); BasketItem item = (BasketItem) viewHolder.text.getTag(); list.add(item); Intent intent = new Intent(mContext, ContextMenuHelperCondimentList.class); intent.putParcelableArrayListExtra ("list", (ArrayList<? extends Parcelable>) list); startActivity(intent); return true; } }); view.setTag(viewHolder); viewHolder.text.setTag(list.get(position)); if(list.get(position).getKorb()==1){ viewHolder.text.setBackgroundDrawable(getResources().getDrawable(R.drawable.strike_out)); }else{ viewHolder.text.setBackgroundDrawable(null); } } else { view = convertView; } ViewHolder holder = (ViewHolder) view.getTag(); holder.text.setText(list.get(position).getZutat()); holder.text.setTypeface(mFontNormal); return view; } }


Viele Grüße

Butch

Geändert von Butch78 (27.01.2012 um 09:33 Uhr)
Butch78 ist offline   Mit Zitat antworten
Alt 27.01.2012, 07:25   #2 (permalink)
Neuer Benutzer

Registriert seit: 06.12.2011
Beiträge: 22
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
Standard AW: Fehlerhafte Selektion in der Liste

Keiner eine Idee?

Gruß
Butch78 ist offline   Mit Zitat antworten
Alt 27.01.2012, 09:01   #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
Standard AW: Fehlerhafte Selektion in der Liste

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.
the_alien ist offline   Mit Zitat antworten
Alt 27.01.2012, 09:30   #4 (permalink)
Neuer Benutzer

Registriert seit: 06.12.2011
Beiträge: 22
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
Standard AW: Fehlerhafte Selektion in der Liste

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:
viewHolder.text.setBackgroundDrawable(null); viewHolder.text.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { BasketItem item = (BasketItem) v.getTag(); if(item.getKorb() == 0){ item.setKorb(1); v.setBackgroundDrawable(getResources().getDrawable(R.drawable.strike_out)); }else{ item.setKorb(0); v.setBackgroundDrawable(null); } } });

Gruß
Butch
Butch78 ist offline   Mit Zitat antworten
Alt 27.01.2012, 10:55   #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
Standard AW: Fehlerhafte Selektion in der Liste

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.
strider ist offline   Mit Zitat antworten
Alt 27.01.2012, 11:51   #6 (permalink)
Neuer Benutzer

Registriert seit: 06.12.2011
Beiträge: 22
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
Standard AW: Fehlerhafte Selektion in der Liste

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ß


Butch78 ist offline   Mit Zitat antworten
Alt 27.01.2012, 11:59   #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
Standard AW: Fehlerhafte Selektion in der Liste

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.
the_alien ist offline   Mit Zitat antworten
Alt 27.01.2012, 13:15   #8 (permalink)
Neuer Benutzer

Registriert seit: 06.12.2011
Beiträge: 22
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
Standard AW: Fehlerhafte Selektion in der Liste

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:
 
BasketItem item =
mBasketList.get(position); if(item.getKorb()==1){ viewHolder.text.setBackgroundDrawable(getResources().getDrawable (R.drawable.strike_out)); }else{ viewHolder.text.setBackgroundDrawable(null); }
Butch78 ist offline   Mit Zitat antworten
Alt 27.01.2012, 13:16   #9 (permalink)
Android Guru

Registriert seit: 09.05.2009
Beiträge: 2.389
Abgegebene Danke: 36
Erhielt 307 Danke für 289 Beiträge
Standard AW: Fehlerhafte Selektion in der Liste

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 )
swordi ist offline   Mit Zitat antworten
Alt 27.01.2012, 13:32   #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
Standard AW: Fehlerhafte Selektion in der Liste

Zitat:
Zitat von Butch78 Beitrag anzeigen
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.
Nein, du setzt den Hintergrund nur wenn der convertView == null ist.
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.
the_alien ist offline   Mit Zitat antworten
Antwort

Stichworte
-

Themen-Optionen
Ansicht


Ähnliche Themen

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




Du liest gerade: "Fehlerhafte Selektion in der Liste" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.