2013-05-17 4 views
3

Мой ListView содержит два . В одной строке первая - для имени, а вторая - для результата. Мне нужно изменить цвет фона результата TextView в соответствии с результатом. Например, если пройдет, то результат TextView цвет будет зеленым, если результат не будет TextView цвет будет красным. У меня есть десять строк в моем ListView. Я попытался как этотЭлемент списка элементов Android-Listview меняется при прокрутке

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 

    ViewHolder holder; 
    if(convertView==null) 
    { 
     holder = new ViewHolder(); 
     convertView = inflater.inflate(R.layout.items, null); 

     holder.imgViewLogo = (ImageView) convertView.findViewById(R.id.imgViewLogo); 
     holder.txtViewTitle = (TextView) convertView.findViewById(R.id.txtViewTitle); 
     holder.txtViewDescription = (TextView) convertView.findViewById(R.id.txtViewDescription); 
     holder.txtholder = (TextView) convertView.findViewById(R.id.holder1); 
     holder.img = (ImageView) convertView.findViewById(R.id.temperrr); 
     convertView.setTag(holder); 
    } 
    else 
     holder=(ViewHolder)convertView.getTag(); 

    ItemBean bean = (ItemBean) itemList.get(position); 

    holder.imgViewLogo.setImageResource(bean.getImage()); 
    holder.txtViewTitle.setText(bean.getTitle()); 
    holder.txtViewDescription.setText(bean.getDescription()); 
    //------------------ 
    if (position==0) 
    { 
     if(GridviewAdapter.glu>=81) 
     { 
     holder.img.setImageResource(R.drawable.red_arrow); 
     holder.txtViewDescription.setBackgroundResource(R.color.resultred); 
     holder.txtholder.setBackgroundResource(R.color.resultred); 
     } 
     else if (GridviewAdapter.glu==79||GridviewAdapter.glu==80) 
     { 
      holder.img.setImageResource(R.drawable.orange_arrow); 
      holder.txtViewDescription.setBackgroundResource(R.color.resultoren); 
      holder.txtholder.setBackgroundResource(R.color.resultoren); 
     } 
     else 
     { 
      holder.img.setImageResource(R.drawable.resultarrawnocolor); 
      holder.txtViewDescription.setBackgroundResource(0); 
      holder.txtholder.setBackgroundResource(0); 
     } 

    } 
     holder.img.setImageResource(R.drawable.resultarrawnocolor); 
     return convertView; 
} 

Но, при прокрутке списка цвета фон changing.what Других случайных элементов, я должен делать.? Как я могу контролировать элементы в каждой позиции в списке. Вышеприведенный код предназначен только для первой строки. я прав?

+1

использование андроида: cacheColorHint = "# 00000000" в Уре файле urlistview.xml – Sam

+0

что 'GridviewAdapter.glu'? где r u сохраняет метки? r метки, отображаемые в любом текстовом виде? это будет легко помочь, если вы можете опубликовать весь класс, или если и описать, что вы делаете. –

ответ

5

Попробуйте это

 @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 

     ViewHolder holder; 
     if(convertView==null) 
     { 
      holder = new ViewHolder(); 
      convertView = inflater.inflate(R.layout.items, null); 

      holder.imgViewLogo = (ImageView) convertView.findViewById(R.id.imgViewLogo); 
      holder.txtViewTitle = (TextView) convertView.findViewById(R.id.txtViewTitle); 
      holder.txtViewDescription = (TextView) convertView.findViewById(R.id.txtViewDescription); 
      holder.txtholder = (TextView) convertView.findViewById(R.id.holder1); 
      holder.img = (ImageView) convertView.findViewById(R.id.temperrr); 
      convertView.setTag(holder); 
     } 
     else 
      holder=(ViewHolder)convertView.getTag(); 




     ItemBean bean = (ItemBean) itemList.get(position); 

     holder.imgViewLogo.setImageResource(bean.getImage()); 
     holder.txtViewTitle.setText(bean.getTitle()); 
     holder.txtViewDescription.setText(bean.getDescription()); 


//**********SET ALSO YOUR DEFAULT BACKGROUND HERE******** like// 

    holder.txtViewDescription.setBackgroundResource(R.color.DEFAULCOLOR); 
    holder.txtholder.setBackgroundResource(R.color.DEFAULCOLOR); 
    holder.img.setImageResource(R.drawable.defalut_image); 


//**********SET ALSO YOUR DEFAULT BACKGROUND HERE******** ok// 


     //------------------ 
     if (position==0) 
     { 
      if(GridviewAdapter.glu>=81) 
      { 
      holder.img.setImageResource(R.drawable.red_arrow); 
      holder.txtViewDescription.setBackgroundResource(R.color.resultred); 
      holder.txtholder.setBackgroundResource(R.color.resultred); 
      } 
      else if (GridviewAdapter.glu==79||GridviewAdapter.glu==80) 
      { 
       holder.img.setImageResource(R.drawable.orange_arrow); 
       holder.txtViewDescription.setBackgroundResource(R.color.resultoren); 
       holder.txtholder.setBackgroundResource(R.color.resultoren); 
      } 
      else 
      { 
       holder.img.setImageResource(R.drawable.resultarrawnocolor); 
       holder.txtViewDescription.setBackgroundResource(0); 
       holder.txtholder.setBackgroundResource(0); 
      } 

     } 
      holder.img.setImageResource(R.drawable.resultarrawnocolor); 
      return convertView; 
    } 
+0

эй, но он не меняет цвет стрелки, а все это okei. – Aaloka

+0

holder.img.setImageResource (R.drawable.defaultImage); в том же месте –

+0

Да, это правда. Хорошо работает. – Aaloka

7

Я думаю, это потому, что вид списка перерабатывает вид, следовательно, вызывает такие проблемы .Try следующее:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = null; 
     convertView = null; 
     row = convertView; 

     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater) _context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = inflater.inflate(R.layout.row, parent, 
        false); 
         // your code 


      } 
    return row; 
} 

С точки зрения новообращенного и вид строки как будут intialized, как нулевые .Hence строк будут завышены каждый раз, и предотвращая рециркуляцию видов.

Ссылка: Listview android recycling В этих ссылках объясняется механизм просмотра отходов.

  • используйте приведенный выше код, если неправильные виды меняют цвет.
  • если вы пытаетесь сказать о трогательных взглядов во время прокрутки фон становится черным, а затем использовать следующий в списке

андроида: cacheColorHint = «# 00000000»

+0

Эй, спасибо, но у меня проблемы с этой строкой row = inflater.inflate (R.layout.row, parent, false); – Aaloka

+0

какая проблема .. некоторая ошибка ?? post log cat –

+0

@richita «строка не может быть разрешена или не поле» – Aaloka

0

У вас есть что-то вроде этого,

if(Yourmark[position]<50) //Where Yourmark[] is the mark array you are passing to your custom adapter 
{ 
     holder.img.setImageResource(R.drawable.red_arrow); 
     holder.txtViewDescription.setBackgroundResource(R.color.resultred); 
     holder.txtholder.setBackgroundResource(R.color.resultred); 
} 

else 
{ 
     holder.img.setImageResource(R.drawable.green_arrow); 
     holder.txtViewDescription.setBackgroundResource(R.color.resultgreen); 
     holder.txtholder.setBackgroundResource(R.color.resultgreen); 
} 
} 
0

Установите этот код на адаптере (обычай), чтобы вы могли повторно использовать представление с предыдущим цветом, только если выбрано представление.

public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(
      Context.LAYOUT_INFLATER_SERVICE); 

    Task task = taskArrayList.get(position); 

    View view = inflater.inflate(R.layout.task_row, parent, false); 

    if(MyActivity.getIsClicked() && MyActivity.getPositionClicked() == position){ 
     view.setBackgroundResource(R.color.backgroundSelectedItem); 
    } 
Смежные вопросы