2013-05-17 36 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

采用Android:cacheColorHint = “#00000000” 在乌尔urlistview.xml文件 – Sam

+0

是什么'GridviewAdapter.glu'?哪里存储标记?显示在任何文本视图中的标记?如果你可以发布全班或如果你描述你在做什么,这将很容易帮助。 –

回答

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

我想这是因为列表视图中回收的观点,因此造成这样的问题。尝试以下操作:

@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

什么样的问题..有些错误?张贴日志猫 –

+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); 
    }