2012-12-16 113 views
2

我重写SimpleAdapter:Android:我如何更改ListView的一个项目的颜色?

class NoticelistAdapter extends SimpleAdapter 
{ 
    public NoticelistAdapter(Context context, 
      List<? extends Map<String, ?>> data, int resource, 
      String[] from, int[] to) 
    { 
     super(context, data, resource, from, to); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     Map<String,Object> map= list.get(position); 
     int readState = (Integer) map.get("ReadState"); 
     if (readState == 1) 
     { 
      // do something to change the color of title 
     } 
     return convertView; 
    } 
} 

和适配器是:

adapter = new NoticelistAdapter(NoticelistActivity.this, list, R.layout.row_noticelist, 
            new String[] { "Title", "RealName","Date"}, 
            new int[] { R.id.noticetitle, R.id.noticerealname,R.id.noticedate}); 

有一个在每个称为 “READSTATE” 图int参数,如果READSTATE == 1,那么我想改变“标题”(TextView)的颜色为另一种颜色。 我知道我应该重写getView(...)在我的适配器,但我不知道如何做到这一点。你能帮我吗?先谢谢你。

+0

首先看到这个:http://www.vogella.com/articles/AndroidListView/article.html –

回答

4

覆盖适配器的getItemViewType()返回两个不同的布局标志,并覆盖getViewTypeCount()以返回视图数量。然后,根据标志,在getView()设置行布局:

private static final int TYPE_READ = 0; 
 private static final int TYPE_NON_READ = 1; 
private static final int TYPE_MAX_COUNT = TYPE_NON_READ + 1; 
//... 

    @Override 
    public int getItemViewType(int position) { 
     int readState = (Integer) mMap.get("ReadState"); 
     if(readState==1){ 
      return TYPE_READ; 
     }else{ 
      return TYPE_NON_READ; 
     } 

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 
     int type = getItemViewType(position); 

     if (convertView == null) { 
      holder = new ViewHolder(); 
      switch (type) { 
       case TYPE_READ: 
        convertView = mInflater.inflate(R.layout.item_one, null); 
        //set read layout 
        break; 
       case TYPE_NON_READ: 
        convertView = mInflater.inflate(R.layout.item_two, null); 
        // set non-read layout 
        break; 
      } 
    //etc 

这里是一个complete tutorial

1

正如你所说,你已经使用自定义适配器为你创建的listview,然后你需要做的是在下面。在适配器的getView方法中,您需要设置列表行xml的父视图的背景颜色。您还可以根据您的要求更改每行颜色。

请参阅本How can I set different background color for each row in listview?

+0

大声笑,我知道,但我不知道如何编码... – jxdwinter

+0

if(readState == 1) convertView.setBackgroundResource(R.drawable.bg_list_even); } –

相关问题