2013-05-31 132 views
0

我想改變我的listView在customAdapter中的行顏色。還有包括0和1,我想從陣列讀取和改變行這樣的顏色整數數組:Android ListView行顏色

0 =白色

1 =黃色

,但它顯示所有行都是黃色。 這是我CustomAdapter:

package com.example.test; 

import java.util.ArrayList; 
import java.util.List; 

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Color; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class CustomAdapter extends ArrayAdapter<RowItem> { 

ArrayList<Integer> test; 

Context context; 

public CustomAdapter(Context context, int resourceId, List<RowItem> items) { 
    super(context, resourceId, items); 
    this.context = context; 
} 

/* private view holder class */ 
private class ViewHolder { 
    ImageView imageView; 
    TextView txtTitle; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder = null; 
    RowItem rowItem = getItem(position); 


    SqliteHelper checkFav = new SqliteHelper(context); 
    checkFav.open(); 
    test = checkFav.getFavForList(); 
    checkFav.close(); 

    LayoutInflater mInflater = (LayoutInflater) context 
      .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.row_layout, null); 
     holder = new ViewHolder(); 
     holder.txtTitle = (TextView) convertView.findViewById(R.id.pTxt); 

     holder.imageView = (ImageView) convertView.findViewById(R.id.icon); 
     convertView.setTag(holder); 


    } else 


     holder = (ViewHolder) convertView.getTag(); 

        int color0 = Color.YELLOW; 
     int colorDefault = Color.WHITE; 

     switch (test.get(position)){ 
     case 0: 
      convertView.setBackgroundColor(colorDefault); 
      break; 
     case 1: 
      convertView.setBackgroundColor(color0); 
     }  
      holder.txtTitle.setText(rowItem.getTitle()); 

    holder.imageView.setImageResource(rowItem.getImageId()); 

    return convertView; 
} 

} 

這是我row_layout.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" > 

    <ImageView 
     android:id="@+id/icon" 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:layout_marginBottom="5dp" 
     android:layout_marginLeft="5dp" 
     android:layout_marginRight="5dp" 
     android:layout_marginTop="5dp" 
     android:src="@drawable/active_icon" /> 

    <TextView 
     android:id="@+id/pTxt" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:textSize="20sp" 
     android:gravity="right"/> 
</LinearLayout> 

在此先感謝。

回答

0

快速解決方案(不是很漂亮的代碼,但是作品):

@Override 
public int getItem(int position){ 
    return test.get(position); 
} 


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

    int color0 = .... 
    int color1 = .... 
    int colorDefault = ... 

    switch (test.get(position)) { 
    case 0: 
      convretview.setBackgroundColor(color0); 
      break; 
    case 1: 
      convretview.setBackgroundColor(color1); 
      break; 
    default: 
      convretview.setBackgroundColor(colorDefault); 
    } 
    ... 
} 
+0

它在列表加載完成後完成了工作,但是當滾動它時,行的顏色會隨機更改,而不是按照測試ArrayList的順序進行更改。 – Sozi

+0

覆蓋適配器的getItem()方法。添加到上面的代碼。 –

+0

我無法從int轉換爲RowItem。 – Sozi

1

getView()在列表中呼籲每一行,因此你不能循環遍歷test所有項目,但只能處理一個由position表示,你應該做的是後(沒有)的if (convertView == null)塊。

編輯

getView()應該做以下事情:

  • 檢查convertView不爲空(如果是,創建一個新的視圖,你所做的那樣)
  • 檢查convertView是正確的類型(這隻在列表中使用多於一種視圖時才重要)。如果類型錯誤,請創建一個新的視圖。

現在我們有列表行有效的查看。

  • 檢索影響如何顯示此行的數據。在你的情況下,這將是test.get(position)的結果。 position是請求行的編號(從ListView頂部的0開始)。
  • 根據您的數據(你這樣做的for循環,但你應該在position的要求的項目做一次)調整視圖。
  • 返回查看

在更復雜的情況下,你可能需要做前一秒而不是在這裏的第三步。

+0

是否有可能是更具體的認識到? – Sozi

+0

@Shekarlab我已添加更多詳細信息 –

+0

感謝您的回覆,我按照您和Rodion Altshuler的說法,它會正確加載ListView,但上下滾動時,行的顏色會隨機更改,而不會根據測試ArrayList 。 – Sozi