2013-05-17 124 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); 
    }