2016-10-05 8 views
0

Ich habe einen Adapter zu meiner ListView gemacht und ich möchte die Farbe einiger Zeilen programmgesteuert ändern, wenn sie den angegebenen Wert haben.ListView verliert die Formatierung beim Scrollen

Der folgende Code zeigt, wie dies implementiert wird. Zwei seltsame Dinge passieren:

1) Die erste Zeile sollte gemalt werden, war aber nicht;

2) Die anderen Zeilen (mit Ausnahme der ersten) sind farbig, aber wenn Sie eine Rolle ausführen, verliert sie die Hintergrundfarbe.

public View getView (int position, View convertView, ViewGroup parent) { 
     convertView = (RelativeLayout) inflater.inflate(resource, null); 
     Content Legend = getItem(position); 

     TextView name = (TextView) convertView.findViewById(R.id.name); 
     name.setText(Legend.getName()); 

     TextView value = (TextView) convertView.findViewById(R.id.value); 

     if (Legend.getValue().equals("Color")){ 
      convertView.setBackgroundColor(Color.GRAY); 
      Legend.setValue(""); 
     }*/ 
     value.setText(Legend.getValue()); 

     return convertView; 
    } 

Antwort

0

Die Ansicht in listView wird erneut verwendet. Versuchen Sie zu glauben, dass Sie jede Ansicht an einem Ort einstellen. So können Sie jede Situation müssen prüfen, fügen else {}

if (Legend.getValue().equals("Color")){ 
     convertView.setBackgroundColor(Color.GRAY); 
     Legend.setValue(""); 
    } else { 
    //set background and other value if not equals "color" 

}

0
static class ViewHolderItem { 
    TextView name, value; 
public ViewHolderItem(View view) { 
      name = (TextView) view.findViewById(R.id.name); 
value = (TextView) view.findViewById(R.id.value); 
} 


    @Override 
    public View getView(final int position, View convertView, final ViewGroup parent) { 

     ViewHolderItem holder; 
     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.xxx, parent, false); 
      holder = new MyHolder(convertView); 
      convertView.setTag(holder); 
     } else { 
      holder = (MyHolder) convertView.getTag(); 
     } 
      Content Legend = getItem(position); 
      holder.name.setText(Legend.getName()); 

if (Legend.getValue().equals("Color")){ 
      convertView.setBackgroundColor(Color.GRAY); 
      holder.value.setText("whatever you wanna show or keep it empty"); 
      //whatever you wanna do 
     } 
else{ 
holder.value.setText(Legend.getValue()); 
} 
Verwandte Themen