Listview - Zeilenfarbe bestimmter Zeilen ändern

  • Hallo zusammen,

    ich sitze an einem Problem und weiß einfach nicht wie ich es lösen soll. Irgendwie will das einfach nicht funktionieren. Ich versuche mit einem Custom-Array-Adapter erstellt. Jetzt versuche ich in der getView bei bestimmten Zeilen die Hintergrundfarbe zu ändern. Das ganze sieht schon mal nicht schlecht aus, funktioniert aber einfach nicht. Wenn die View angezeigt wird werden die Zeilen richtig eingefärbt. Scrollt man aber nach unten und dann wieder rauf werden die gefärbten Zeilen leider wieder normal angezeigt. Die Hintergrundfarbe ist dann in Zeilen die gar nicht eingefärbt werden sollen. Ich habe in meinem Object eine Eigenschaft "ueberschrift" die mit 1 oder 0 gefüllt wird. Bei 1 soll die jeweilige Zeile eingefärbt werden. Kann mir jemand sagen was ich falsch mache?
    Hier der Code des Adapter:

    Context context;
    int layoutResourceId;
    private ArrayList<rs_daten> items;
    private int ueber = 0;

    public rs_datenAdapter(Context context, int layoutResourceId, ArrayList<rs_daten> items) {
    super(context, layoutResourceId, items);
    this.layoutResourceId = layoutResourceId;
    this.context = context;
    this.items = items;
    }


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    rs_datenHolder holder = null;
    rs_daten rs_daten = items.get(position);


    if(row == null)
    {
    LayoutInflater inflater = ((Activity)context).getLayoutInflater();

    row = inflater.inflate(layoutResourceId, parent, false);
    holder = new rs_datenHolder();
    holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon);
    holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);
    holder.txtUeber = rs_daten.getueberschrift();
    if (holder.txtUeber > 0){
    //row.setBackgroundResource(R.layout.listrow_ueber);
    holder.txtTitle.setTextColor(Color.parseColor("#ffffff"));
    }
    row.setTag(holder);
    }
    else
    {
    holder = (rs_datenHolder)row.getTag();
    }

    if (holder.txtUeber > 0){
    //row.setBackgroundResource(R.layout.listrow_ueber);
    row.setBackgroundColor(Color.parseColor("#00ff00"));
    }

    holder.txtTitle.setText(rs_daten.gettitle());
    holder.imgIcon.setImageResource(rs_daten.geticon());

    return row;
    }


    static class rs_datenHolder
    {
    ImageView imgIcon;
    TextView txtTitle;
    int txtUeber;
    }
    }

  • Du musst natürlich für beide Varianten den Background setzen... Listviews recyclen Views

    if (holder.txtUeber > 0){
    //row.setBackgroundResource(R.layout.listrow_ueber);
    row.setBackgroundColor(Color.parseColor("#00ff00"));
    }
    else {
    background auf standard setzen;
    }

  • Danke DIR! Ich dachte ich käme nie drauf!
    Hast Du ggf. auch noch eine Idee wie ich das Icon auf der linken Seite dann entfernen und den Text ganz nach links setzen kann?

  • Immer entfernen oder nur manchmal ???

    Manchmal:

    EInfach die Visibility des Views (Icons) setzen

    holder.imgIcon.setVisibility(VIEW.GONE);


    VIEW.GONE


    Für immer:

    einfach dein XML layout anpassen

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!