Adapter(3)使用适配器的步骤

不论是那种适配器模式,也不管是Listview也好还是gridview也好,对他们填充数据,都是分三步走。

第一:创建一个数据填充的对象,可以是ListView, GridView, Gallery。

 
listView = (ListView) findViewById(R.id.listview_simple);

 

第二步:创建一个数据填充器,可以是BaseAdapter、SimpleAdapter,也可以是与数据库相关联的CursorAdapter。

例如:SimpleAdapter可以使用系统封装好的,你也可以自己去继承一个Simpleadapter,来重写其中的方法。继承 simpleadapter的好处在于,你可以对listitem中每个单一的控件设置监听事件等等一系列操作。如果用的是系统封装好的就有点爱莫能助了。

直接使用系统封装的:

 
SimpleAdapter simpleAdapter = new SimpleAdapter(        
          this,       
          data,         
          R.layout.simple_item,         
          new String[] { "name", "info" },         
          new int[] { R.id.simple_name, R.id.simple_info   
       });   

重写系统的simpleadpter:

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

public class ListSimpleAdapter extends SimpleAdapter {
    // 要使用到的数据源
    private List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
    // 填充数据的资源文件
    private int resource;
    private String[] from;
    private Context context;

    public ListSimpleAdapter(Context context, List<Map<String, Object>> data,
            int resource, String[] from, int[] to) {
        super(context, data, resource, from, to);
        this.context = context;
        this.data = data;
        this.resource = resource;
        this.from = from;
    }

    // item的总行数
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return data == null ? 0 : data.size();
    }

    // item对象
    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    // item的id
    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    // 绘制每一个item
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        Holder holder = null;
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(resource, null);
            holder = new Holder();
            holder.imageView = (ImageView) convertView
                    .findViewById(R.id.listitem_pic);
            holder.title = (TextView) convertView
                    .findViewById(R.id.listitem_title);
            holder.content = (TextView) convertView
                    .findViewById(R.id.listitem_content);
            convertView.setTag(holder);
        } else {
            holder = (Holder) convertView.getTag();
        }
        holder.imageView.setImageResource(Integer.parseInt(data.get(position)
                .get(from[0]).toString()));
        holder.title.setText(data.get(position).get(from[1]).toString());
        holder.content.setText(data.get(position).get(from[2]).toString());
        return convertView;
    }

    class Holder {
        ImageView imageView;
        TextView title;
        TextView content;
    }
}

第三步:将数据填充到对象中去

listView.setAdapter(simpleAdapter);

 

posted @ 2015-05-25 10:40  f9q  阅读(360)  评论(0)    收藏  举报