2014-09-10 100 views
0

我的Android應用程序屏幕上有一個ListView。在列表視圖中,我顯示了ArrayList中的數據。 現在Arraylist有3個字段:Id,Name和Status。 我需要在屏幕上顯示Id和Name,並根據狀態值(可以是0,1或2)設置特定行的背景顏色。我能夠在屏幕上獲取ListView的值,但我似乎無法找到任何示例,我可以在創建的Android列表視圖中設置行的顏色。有人可以幫幫我嗎?我現在使用SimpleAdaptor來顯示列表的值。先謝謝你。 :-)不同的背景顏色在Android ListView中不同的行

這是我的ListView XML ::

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="wrap_content" 
android:id="@+id/relativeLayout" 
android:layout_height="wrap_content" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:orientation="vertical" 
android:background="#FFEBEB" 
tools:context=".MyActivity2"> 

<ListView 
    android:id="@+id/listView" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_centerInParent="true" 
    android:choiceMode="singleChoice" 
    android:textAlignment="center"/> 

</RelativeLayout> 

這是它增加了行您可以在您的Adapter class getView()方法做到這一點的XML ::

<?xml version="1.0" encoding="utf-8"?> 
<!-- row.xml --> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:paddingTop="4dip" 
    android:paddingBottom="6dip" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:layout_gravity="left"> 


    <TextView android:id="@+id/TITLE_CELL" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="left" 
     android:layout_weight="1" 
     android:height="40dp" 
     android:textAlignment="center" 
     android:padding="10dp"/> 

    <TextView android:id="@+id/FROM_CELL" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:gravity="right" 
     android:height="40dp" 
     android:textAlignment="center" 
     android:padding="10dp"/> 

</LinearLayout> 
+1

你必須創建自定義適配器和適配器設置視圖。然後檢查您的狀態值並設置背景顏色。 – 2014-09-10 08:29:15

+0

你可以在你的適配器上顯示你的getView代碼嗎? – 2014-09-10 08:34:10

+0

您應該使用BaseAdapter來自定義列表視圖,請參閱示例:http://stackoverflow.com/questions/16333754/how-to-customize-listview-using-baseadapter – ben 2014-09-10 08:37:35

回答

4

。例如:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    {  
     if(convertView == null) 
     { 
      convertView = inflater.inflate(R.layout.list_row, parent, false); 
     } 

     //do your stuff 

     if(status.equals(0)) 
     { 
      convertView.setBackgroundColor(Color.RED); // or whatever you want to set color 
     } 
     else if(status.equals(1)) 
     { 
      convertView.setBackgroundColor(Color.GREEN); 
     } 
     if(status.equals(2)) 
     { 
      convertView.setBackgroundColor(Color.YELLOW); 
     }  

     //do your remaining stuff.... 

     return convertView; 
    } 
0

我相信你會需要一個自定義適配器。覆蓋getView()方法,並根據需要設置視圖背景。

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

ViewHolder viewHolder; 
if (convertView == null) { 
// inflate the layout 

      convertView = inflater.inflate(R.layout.adapter, parent, false); 

      // well set up the ViewHolder 
      viewHolder = new ViewHolder(convertView); 

      // store the holder with the view. 
      convertView.setTag(viewHolder); 

     } 
     else { 
      // we've just avoided calling findViewById() on resource everytime 
      // just use the viewHolder 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 

     Item myItem = getItem(position); 
     int id = myItem.getMyItemId(); 
     switch (id) { 
      case 1: 
      convertView.setBackgroundResource("whatever"); 
      break; 
      case 2: 
      convertView.setBackgroundResource("whatever ever"); 
      break; 
      case 3: 
      convertView.setBackgroundResource("whatever not"); 
      break; 
      default: 
      break; 
     return convertView; 
} 
3

如果你想要一些隨機的顏色代碼,試試這個:

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{  
    if(convertView == null) 
    { 
     convertView = inflater.inflate(R.layout.list_row, parent, false); 
    } 

    Random rnd = new Random(); 
    int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); 
    convertView.setBackgroundColor(color); 

    return convertView; 
}