我是android的新人。如何更改listview中每個項目的背景顏色?
我做了從數據庫中把我的數據,並將其顯示到ListView ..
現在我想設置每個項目的背景顏色。
這就是我從數據庫retrive數據,這裏一個領域是存在的,就像地位..
如果狀態爲1,則項目顏色會變爲綠色。
像
我怎樣才能做到這一點。
這是可能的。請幫幫我。
非常感謝。
我是android的新人。如何更改listview中每個項目的背景顏色?
我做了從數據庫中把我的數據,並將其顯示到ListView ..
現在我想設置每個項目的背景顏色。
這就是我從數據庫retrive數據,這裏一個領域是存在的,就像地位..
如果狀態爲1,則項目顏色會變爲綠色。
像
我怎樣才能做到這一點。
這是可能的。請幫幫我。
非常感謝。
這很簡單。你需要繼承一個適配器,並覆蓋getView()
,getViewTypeCount()
和getItemViewType()
在你ArrayAdapter可以檢查值,根據該值改變視圖的背景顏色。
內部適配器的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>
我使用這個ArrayAdapter它是隻顯示LIST_NAME只有一個coloumn ...我怎麼可以顯示列表視圖有兩個coloumn .. ArrayAdapter
我用適配器的示例更新了我的答案,您可以在其中使用自定義視圖,以及該視圖在xml中的外觀應該如何。 –
這部分拋出錯誤holder.name.setText(getItem(position).name); holder.status.setText(getItem(position).status); – selvam
此示例代碼可以幫助你瞭解基本的做法是如何與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 這是關於在列表視圖基礎知識本教程。
創建像
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;
}
}
請您給爲一些示例代碼或教程..... – selvam