首页 > 代码库 > Android常用的Adapter

Android常用的Adapter

Android中常用的Adapter有ArrayAdapter、SimpleAdapter、SimpleCursorAdapter以及继承BaseAdapter的各种用户自定义Adapter;

这并不说前面三种Adapter不可继承,它们也是可以继承的,关于前面三种Adapter的具体使用可以参考网上的其他博客。

本篇博客主要记录继承BaseAdapter自定义Adapter的常规写法

public class MyAdapter extends  BaseAdapter{

    private List<Fish> list = new ArrayList<>();

    private Context context;

    private LayoutInflater inflater;      

    public MyAdapter(Context context, List<Fish> list){
        this.context = context;
        this.list = list;
        inflater = LayoutInflater.from(context);
    }  

    @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){
        ViewHolder viewHolder;
        if (convertView == null){
            viewHolder = new ViewHolder();
            convertView = inflater.inflate(R.layout.list_item, null);
            viewHolder.textView = (TextView)convertView.findViewById(R.id.text_item);
            convertView.setTag(viewHolder);
        }else {
            viewHolder = (ViewHolder)convertView.getTag();
        }
        ActivityAttr activityAttr = list.get(position);
        viewHolder.textView.setText(activityAttr.getName());
        return convertView; 
    }

    class ViewHolder{
        TextView textView;
    }
}    

上面的getCount、getItem、getItemId、getView四个方法都需要重写,viewHold和convertView主要为了提高list的流畅性,减小系统开销

其中viewHold可以让程序只有第一次加载时才需要用findViewById去加载相应组件,而convertView可以缓存已经显示过的list,第二个显示不需要再次加载,直接显示即可 

Android常用的Adapter