- 简介
BaseAdapter用于数据和UI界面的适配。可用于ListView,Spinner,GridView等。随着RecycleView的流行,BaseAdapter的应用已经越来越少了。
- 功能介绍
- getCount返回数据的总量
- getItem返回该position上数据的内容
- getItemId返回该position上数据的Id
- getView返回该position上数据的视图
- 使用简介
- 创建bean对象用于封装数据
- 在构造方法中初始化用于映射的List数据
- 创建ViewHolder类,创建布局映射关系
- 判断convertView,为空则创建,并设置tag,否则通过tag来取出Viewholder
- 给ViewHolder中的控件设置数据
- 优化
主要是getView方法的优化。
- 利用缓存机制避免重复创建新的view对象
利用ViewHolder避免重复findViewById操作
实例:
package com.example.baseadapterdemo;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class TestAdapter extends BaseAdapter {
private List<ItemBean> mList;
private LayoutInflater mInflater;
public TestAdapter(Context context, List<ItemBean> mList) {
super();
this.mList = mList;
mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder mHolder;
if(convertView == null || convertView.getTag() == null) {
//Time consuming 1 -- inflate
convertView = mInflater.inflate(R.layout.item, null);
mHolder = new ViewHolder();
//Time consuming 2 -- findViewById
mHolder.image = (ImageView) convertView.findViewById(R.id.iv_image);
mHolder.title = (TextView) convertView.findViewById(R.id.tv_title);
mHolder.content = (TextView) convertView.findViewById(R.id.tv_content);
convertView.setTag(mHolder);
} else {
mHolder = (ViewHolder) convertView.getTag();
}
ItemBean bean = mList.get(position);
mHolder.image.setImageResource(bean.itemResId);
mHolder.title.setText(bean.itemTitle);
mHolder.content.setText(bean.itemContent);
return convertView;
}
//Google I/O
class ViewHolder {
public ImageView image;
public TextView title;
public TextView content;
}
}