2013-10-24 298 views
1

我是android的新人。如何更改listview中每個項目的背景顏色?

我做了從數據庫中把我的數據,並將其顯示到ListView ..

現在我想設置每個項目的背景顏色。

這就是我從數據庫retrive數據,這裏一個領域是存在的,就像地位..

如果狀態爲1,則項目顏色會變爲綠色。

Display Listview

我怎樣才能做到這一點。

這是可能的。請幫幫我。

非常感謝。

回答

1

這很簡單。你需要繼承一個適配器,並覆蓋getView()getViewTypeCount()getItemViewType()

+0

請您給爲一些示例代碼或教程..... – selvam

1

在你ArrayAdapter可以檢查值,根據該值改變視圖的背景顏色。

1

內部適配器的getView()方法,你可以設置基於量的背景資源,如下所示:

// assume view is your item view, status the number, and you have a context 
if(status == 1){ 
    view.setBackgroundColor(context.getResources().getColor(R.color.green)); 
} else { 
    view.setBackgroundColor(context.getResources().getColor(R.color.red)); 
} 

現在,你需要確保你的資源,通過創建來定義這些顏色文件colors.xml這些內容:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <color name="red">#ff0000</color> 
    <color name="green">#00ff00</color> 
</resources> 

注意,如果項目可以點擊,但他點擊時提供反饋給用戶是非常重要的。在這種情況下,您應該使用state list drawable


在評論後編輯。您的適配器應該看起來像這樣,假設Item包含名稱和狀態。

public class MyArrayAdapter extends ArrayAdapter<Item> { 

    private final Context context; 

    public MyArrayAdapter(Context context, int textViewResourceId, Item[] objects) { 
     super(context, textViewResourceId, objects); 
     this.context = context; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     if(convertView == null){ 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.list_item, parent, false); 

      holder = new ViewHolder(); 
      holder.container = (LinearLayout) convertView.findViewById(R.id.container); 
      holder.name = (TextView) convertView.findViewById(R.id.name); 
      holder.status = (TextView) convertView.findViewById(R.id.status); 

      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.name.setText(getItem(position).name); 
     holder.status.setText(getItem(position).status); 

     Item item = getItem(position); 
     if(item.status == 1){ 
      holder.container.setBackgroundColor(context.getResources().getColor(R.color.green)); 
     } else { 
      holder.container.setBackgroundColor(context.getResources().getColor(R.color.red)); 
     } 

     return convertView; 
    } 

    private class ViewHolder { 
     public TextView name; 
     public TextView status; 
     public LinearLayout container; 
    } 
} 

接下來,您list_item.xml佈局應該是這樣的:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="0px" 
    android:layout_height="wrap_content" 
    android:id="@+id/container"> 

    <TextView 
     android:layout_width="0px" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:id="@+id/name" /> 

    <TextView 
     android:layout_width="0px" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:id="@+id/status" /> 

</LinearLayout> 
+0

我使用這個ArrayAdapter它是隻顯示LIST_NAME只有一個coloumn ...我怎麼可以顯示列表視圖有兩個coloumn .. ArrayAdapter 適配器=新ArrayAdapter (此, \t \t \t \t android.R.layout.simple_list_item_1,db.getAll_CheckList_Name()); //資源) \t \t Toast.makeText(getApplicationContext(), \t \t \t \t db.getAll_CheckList_Name()。toString(),10).show(); \t \t l1.setAdapter(adapter); – selvam

+0

我用適配器的示例更新了我的答案,您可以在其中使用自定義視圖,以及該視圖在xml中的外觀應該如何。 –

+0

這部分拋出錯誤holder.name.setText(getItem(position).name); holder.status.setText(getItem(position).status); – selvam

0

此示例代碼可以幫助你瞭解基本的做法是如何與ListView和適配器工作。

public class MyAdapter extends BaseAdapter 
{ 
    private LayoutInflater m_inflater; 
    private MyDataSource m_data; 

    public ProfileListAdapter(MyDataSource _data) 
    { 
     m_inflater = m_activity.getLayoutInflater(); 
     m_data = _data; 
    } 

    @Override 
    public int getCount() 
    { 
     return m_data.getCount(); 
    } 

    @Override 
    public Object getItem(int arg0) 
    { 
     return null; 
    } 

    @Override 
    public long getItemId(int arg0) 
    { 
     return arg0; 
    } 

    @Override 
    public int getViewTypeCount() 
    { 
     return 1; 
    } 

    @Override 
    public int getItemViewType(int _position) 
    { 
     return 0; 
    } 

    @Override 
    public View getView(int _position, View _convertView, ViewGroup _parent) 
    { 
     View rowView = _convertView; 

     if(rowView == null) 
     { 
      rowView = m_inflater.inflate(R.layout.my_item_view, null); 
     } 

     if(m_data.m_list.get(_position).status == 0) 
     { 
      View my_root_layout = v.findViewById(my_root_layout); 
      my_root_layout.setBackgroundResource(R.drawable.my_item_background); 
     } 

     fillInTypeHead(rowView); 

     return rowView; 
    } 
} 

如需詳細信息,你可以去 http://developer.android.com/guide/topics/ui/declaring-layout.html#AdapterViews

我會推薦給你看,從谷歌的工程師http://www.youtube.com/watch?v=wDBM6wVEO70 這是關於在列表視圖基礎知識本教程。

0

創建像

public class Status { 

    private String label; 
    private int status; 

    public Status(String label, int status) { 
     this.label = label; 
     this.status = status; 
    } 

    public String getLabel() { 
     return label; 
    } 

    public int getStatus() { 
     return status; 
    } 

} 

模型創建狀態

ArrayList<Status> listOfStatus=new ArrayList<Status>(); 
     listOfStatus.add(new Status("item1", 0)); 
     listOfStatus.add(new Status("item2", 0)); 
     listOfStatus.add(new Status("item3", 1)); 
     listOfStatus.add(new Status("item4", 1)); 

你需要傳遞的ArrayList在適配器類的ArryaList。現在在Adapter類中初始化ArrayList說listOfStatus並使用getView()方法。

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = convertView; 
     if (view == null) { 
      LayoutInflater lInflater= (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = lInflater.inflate(R.layout.LIST_ITEM_LAYOUT, parent, false); 
     } 

     if (listOfStatus.get(position).getStatus()==1) { 
      view.setBackgroundColor(context.getResources().getColor(R.color.green)); 
     } else { 
      view.setBackgroundColor(context.getResources().getColor(R.color.green)); 
     } 

     return view; 
    } 
} 
相關問題