2017-02-16 7 views
0

У меня есть адаптер, заполняющий мой Listview из извлеченного json. Я хочу изменить цвет некоторых ячеек в зависимости от положения i.e position 1 blue position 2 red и т. Д. Но с использованием текущего кода я получаю желаемый эффект, но он повторяется, когда я просматриваю вниз список. Я понимаю, что это потому, что представление освежает, но не уверен, как его исправить.Android Listview меняется цвет позиций certian

public class ListAdapter extends BaseAdapter { 

MainActivity main; 

ListAdapter(MainActivity main) { 
this.main = main; 
} 

@Override 
public int getCount() { 
return main.countries.size(); 
} 

@Override 
public Object getItem(int position) { 
return null; 
} 

@Override 
public long getItemId(int position) { 
return 0; 
} 

static class ViewHolderItem { 
TextView name; 
TextView code; 
TextView pts; 

} 

@Override 
public View getView(int position, View convertView, ViewGroup parent){ 
ViewHolderItem holder = new ViewHolderItem(); 
if (convertView == null) { 
LayoutInflater inflater = (LayoutInflater) main.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.cell, null); 

     holder.name = (TextView) convertView.findViewById(R.id.name); 
     holder.code = (TextView) convertView.findViewById(R.id.code); 
     holder.pts = (TextView) convertView.findViewById(R.id.pts); 

     convertView.setTag(holder); 
} 
else { 
      holder = (ViewHolderItem) convertView.getTag(); 
} 

holder.name.setText(this.main.countries.get(position).name); 
holder.code.setText(this.main.countries.get(position).code); 
holder.pts.setText(this.main.countries.get(position).pts); 

if (position == 1) { 
holder.name.setBackgroundColor(Color.parseColor("#FFFFFF")); 

} 

return convertView; 

} 

} 
+0

обеспечивает еще состояние с желаемым цветом для textview background – pkgrover

+0

Спасибо, ive попробовал это, но он все еще повторяется во всем списке. –

+1

вы можете создать список цветов в размере вашего списка и взять цвет, который вы хотите, из colorList по позиции – Roish

ответ

0

Вид в списке переработан. Это вид элемента, прокручиваемого снаружи стяжка повторно в пункте прокручивается на экран Используйте код, как это

if (position == 1) { 
    holder.name.setBackgroundColor(Color.parseColor("#FFFFFF")); 
} else { 
    holder.name.setBackgroundColor(...) 
} 

Или, если вы хотите разделить список всего на два пункт цветов:..

if(position % 2 == 0) view.setBackgroundColor(Color.rgb(224, 224, 235)); 
if(position % 2 == 1) view.setBackgroundColor(The normal color you should set); 
0

Если я правильно понял - вы видите этот цвет несколько раз, и не только в положении 1. Это может произойти, так как вы повторно используете convertView, который дал в GetView, и это означает, что вы получите уже созданный и уже используемый вид, который имеет цвет фона и имеет более старые свойства, и вы даете ему новые свойства и данные. Итак, в этом случае он может иметь старый цвет и потому, что вы не придаете цвету -e-позиции, этот цвет прилипает к нему.

Я думаю, что в этом случае -

switch(position){ 
    case 1: 
      holder.name.setBackgroundColor(Color.parseColor("#FFFFFF")); 
      break; 
    case 2: 
      holder.name.setBackgroundColor(Color.parseColor("#EEEEEE")); 
      break; 
    case 3: 
      holder.name.setBackgroundColor(Color.parseColor("#000000")); 
      break; 
    case 4: 
      holder.name.setBackgroundColor(Color.parseColor("#DDDDDD")); 
      break; 
    case default: 
      holder.name.setBackgroundColor(Color.parseColor("#ABCDEF")); 
      break; 
} 

решит проблему переработанного цвета. (добавьте столько цветов, сколько вам нравится в области выбора переключателя, или создайте цветовую матрицу, как было упомянуто выше, и измените ее в соответствии с положением.

 Смежные вопросы

  • Нет связанных вопросов^_^