2013-10-24 241 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; 
    } 
} 
相关问题