2

我重写 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});

每个映射中都有一个名为“readstate”的int参数,如果readstate == 1,那么我想将“Title”(TextView)的颜色更改为另一种颜色。我知道我应该在我的适配器中覆盖 getView(...),但我不知道该怎么做。请你帮帮我。先感谢您。

4

3 回答 3

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

这是一个完整的教程

于 2012-12-16T07:04:50.883 回答
2

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

于 2012-12-16T06:59:04.257 回答
1

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

请参阅此如何为列表视图中的每一行设置不同的背景颜色?

于 2012-12-16T06:48:25.450 回答