看着BaseAdapter,总在那里重复写,嫌烦,然后今天把BaseAdapter封装了一下
BaseAdapter.Java文件
public class CommonAdapter<T> extends BaseAdapter {
private LayoutInflater inflater;
private List<T> datas;
private int layoutId;
private int viewHolderId;
public CommonAdapter(Context context, List<T> datas, int layoutId,
int viewHolderId) {
inflater = LayoutInflater.from(context);
this.datas = datas;
this.viewHolderId = viewHolderId;
}
public void resetData(List<T> datas) {
datas.clear();
this.datas.addAll(datas);
this.notifyDataSetChanged();
}
public void addDatas(List<T> datas) {
this.datas.addAll(datas);
this.notifyDataSetChanged();
}
public void clear() {
datas.clear();
this.notifyDataSetChanged();
}
@Override
public int getCount() {
return datas != null ? datas.size() : 0;
}
@Override
public T getItem(int position) {
return datas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@SuppressWarnings("unchecked")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder<T> viewHolder = null;
if (convertView == null) {
viewHolder = ViewHolderFactory.getViewHolder(viewHolderId);
viewHolder.initView(convertView);
convertView = inflater.inflate(layoutId, null);
} else {
viewHolder = (ViewHolder<T>) convertView.getTag();
}
viewHolder.loadData(convertView, position, datas.get(position));
return convertView;
}
}
ViewHolder.java接口
import android.view.View;
public interface ViewHolder<T> {
public void initView(View convertView);
public abstract void loadData(View convertView, int position, T data);
}
ViewHolderFactory.Java文件
import com.hey900.viewholder.TypeViewHolder;
import com.lidroid.xutils.util.LogUtils;
public class ViewHolderFactory {
public final static int TPYE_VIEWHOLDER = 1;
public static ViewHolder getViewHolder(int viewHolderId) {
if (viewHolderId == TPYE_VIEWHOLDER) {
return new TypeViewHolder();
}
LogUtils.e("亲,你要给ViewHolder啊");
return new TypeViewHolder();
}
}
使用的时候
public class TypeViewHolder implements ViewHolder<Type> {
private TextView menu;
@Override
public void initView(View convertView) {
menu = (TextView) convertView.findViewById(R.id.menu);
}
@Override
public void loadData(View convertView, int position, Type data) {
menu.setText(data.getName());
}
}
adapter = new CommonAdapter<Type>(getActivity(), types,
R.layout.type_left_menu_item, ViewHolderFactory.TPYE_VIEWHOLDER);
menuListView.setAdapter(adapter);
但是这并不是很通用,在条目中有按钮要被按的话就不好用了,还有有多种布局是不好用。