ListItem in ListView individuelle Hintergrundfarbe

  • 6 Antworten
  • Letztes Antwortdatum
T

tasty

Neues Mitglied
0
Hallo @all,

ich habe mich in diesem Forum angemeldet, weil ich ein Problem habe, was mir schon seit Wochen unter den Nägeln brennt.

Ich möchte ein ListView aufbauen. Soweit kein Problem. Ich kann Texte, Bilder usw. übergeben und habe auch einen Adapter abgeleitet.

Nun brauche ich aber unbedingt eine Möglichkeit, wie ich die Hintergrundfarbe eines einzelnen ListItems ändern kann, je nachdem welcher Wert gerade im Wertearray steht.

z.B. Tag == Sonntag -> row.setBackgroundColor(Color.RED);

Ich bin über jede Anregung dankbar :)
VG
 
und wo ist jetzt dein problem ?

hast ja schon selber hingeschrieben wie du es machen kannst
 
ich habe es so ausprobiert, wenn es gehen würde, hätte ich nicht gefragt ;-)

Hier mal mein Versuch:

Code:
package de.nadineschroeder.kallist;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class CalendarAdapter extends ArrayAdapter<Calendar> {
	
	Context context;
	int layoutRessourceId;
	Calendar data[];
	
	public CalendarAdapter(Context _context, int _layoutRessourceId, Calendar[] _data) {
		super(_context, _layoutRessourceId, _data);
		this.layoutRessourceId = _layoutRessourceId;
		this.context = _context;
		this.data = _data;
	}
	
	@Override
	public View getView(int _position, View _convertView, ViewGroup _parent) {
		View row = _convertView;
		MenueHolder holder = null;
		
		if(row == null) {
			LayoutInflater inflater = ((Activity)context).getLayoutInflater();
			row = inflater.inflate(layoutRessourceId, _parent, false);
			holder = new MenueHolder();
			holder.datum = (TextView)row.findViewById(R.id.txtDate);
			row.setTag(holder);
        } else {
            holder = (MenueHolder) row.getTag();
        }

        Calendar calendar = data[_position];
        holder.datum.setText(calendar.datum);
        if (calendar.datum == "Tag 1") {row.setBackgroundColor(Color.RED);}
        return row;
    }
	
	@Override
    public boolean isEnabled(int position) {
        return false;
    }

    static class MenueHolder {
        TextView datum;
	}		
}

Beim schrittweise debuggen kann man ja in die Variable gucken. Dort steht dann auch z.B. der String "Tag 1" drin aber es wird trotzdem nicht rot gefärbt. Wenn ich die if-Abfrage rausnehme werden natürlich alle rot.
 
Zuletzt bearbeitet:
layouts der einzelnen reihen werden wiederverwendet

wenn du jetzt eine reihe rot setzt, weiter scrollst, dann wird auch eine andere rot sein, weil diese wiederverwendet wurde.

musst also immer ein else haben, und die farbe zurücksetzen

Der ursprüngliche Beitrag von 11:32 Uhr wurde um 11:32 Uhr ergänzt:

und wenn du net sagst, wo dein problem ist, dann kann dir keiner helfen.
 
...ich glaube langsam mir ist nicht mehr zu helfen *g*. Mit einem else zweig, der das ganze wieder auf color.WHITE setzt geht es leider auch nicht :-(
 
Was ist Calendar eigentlich für eine Klasse?
Und was ist Datum?
evtl klappt das ja so
if ("Tag 1".equals(Calendar.datum)) {...}

Wir merken uns:
Stringvergleiche IMMER mit equals und niemals mit == machen ;)
 
Stimmt, sollte ich mir endlich mal merken, dass man Strings immer mit equals() vergleicht.

Nur leider bringt das alles nichts:

Wenn ich als Standartfarbe im XML weiß hinterlege, dann im if Zweig ein Item rot färbe und im else Zweig grün, dann werden alle Items grün :angry: Vielleicht sollte ich für meinen Kalender einfach keine ListView nehmen. Ich wollte aber vermeiden so viele Elemente zur Laufzeit erzeugen zu müssen.

Vielleicht gibt es noch eine andere Möglichkeit?

Trotzdem erstmal vielen Dank an alle!

Der ursprüngliche Beitrag von 12:27 Uhr wurde um 13:00 Uhr ergänzt:

So es geht tatsächlich... der Tipp mit dem equals() war Gold wert :)
Vielen Dank!

Code:
if("Tag 1".equalsIgnoreCase(calendar.datum)) {
        	row.setBackgroundColor(Color.LTGRAY);
        }
else {row.setBackgroundColor(Color.WHITE);}
return row;

Ein schönes Pfingstwochenende
 
Zuletzt bearbeitet:
Zurück
Oben Unten