android自定义adapter

来源:互联网 发布:淘宝买家服务热线 编辑:程序博客网 时间:2024/06/06 20:53

使用SimpleAdapter创建list很简单

                    //生成适配器,数组===》ListItem                    SimpleAdapter mSchedule = new SimpleAdapter(getApplicationContext(), tempList, R.layout.record_listitem,                            new String[] {"ItemTitle", "ItemText"},                            new int[] {R.id.ItemTitle,R.id.ItemText});

缺点是不能自定义Item的样式。
比如把
这里写图片描述
中签入签出使用不同的文字颜色,甚至更加复杂的逻辑操作,SimpleAdapter就很难实现了。

对于这个问题,我们可以使用自定义adapter,具体操作如下:

  1. 新建一个Adapter,继承自BaseAdapter
  2. 实现BaseAdapter中的四个方法
    这里写图片描述
    其中getView就是自定义样式的主要方法
  3. 调用Adapter
package com.halfopen.h.cislsign.adapter;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import com.halfopen.h.cislsign.R;import java.util.ArrayList;import java.util.HashMap;/** * Created by h on 2017/7/24. */public class RecordListAdapter extends BaseAdapter {    //数据    private ArrayList<HashMap<String, String>> list;    private Context context;    public RecordListAdapter(Context context, ArrayList<HashMap<String, String>> list){        this.context = context;        this.list = list;    }    @Override    public int getCount() {        return list.size();    }    @Override    public Object getItem(int position) {        return list.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    //自定义界面    @Override    public View getView(int position, View convertView, ViewGroup parent) {        LayoutInflater _LayoutInflater = LayoutInflater.from(this.context);        convertView = _LayoutInflater.inflate(R.layout.record_listitem, null);        if(convertView!=null){            TextView nameView = (TextView) convertView.findViewById(R.id.ItemTitle);        //用户名            TextView actionView = (TextView) convertView.findViewById(R.id.ItemAction);     //签入/签出            TextView timeView = (TextView) convertView.findViewById(R.id.ItemText);         //时间            String name = list.get(position).get("ItemTitle");            String action = list.get(position).get("ItemAction");            String time = list.get(position).get("ItemText");            nameView.setText(name);            actionView.setText(action);            timeView.setText(time);            if (action.equals("签出")){                actionView.setTextColor(convertView.getResources().getColorStateList(R.color.colorAccent));            }        }        return convertView;    }}

这里写图片描述