Android:如何更改ListView中某个项目的颜色?

时间:2012-12-16 06:44:05

标签: android listview adapter

我重写SimpleAdapter:

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});

在每个地图中都有一个名为&#34; readstate&#34;的int参数,如果readstate == 1,那么我想要改变&#34; Title&#34;的颜色。 (TextView)到另一种颜色。 我知道我应该在我的适配器中覆盖getView(...),但我不知道如何做到这一点。你能帮我吗?提前谢谢。

3 个答案:

答案 0 :(得分: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 :(得分:2)

在获取视图方法中。检查位置。如果poistion == row0然后使用drawable将背景颜色设置为背景..您可以使用行边框自定义每个listview行的样式。 http://docs.xamarin.com/Android/Guides/User_Interface/Working_with_ListViews_and_Adapters/Part_3_-_Customizing_a_ListView“s_Appearance。该链接将帮助您。

答案 2 :(得分:1)

正如您所说,您在创建时使用自定义适配器进行列表视图,然后您需要执行的操作如下所示。在适配器的getView方法中,您需要设置列表行xml的父视图的背景颜色。您还可以根据您的要求更改每一行颜色。

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