本文主要是介绍抽取BaseAdapter,省代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
看着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();}@Overridepublic int getCount() {return datas != null ? datas.size() : 0;}@Overridepublic T getItem(int position) {return datas.get(position);}@Overridepublic long getItemId(int position) {return position;}@SuppressWarnings("unchecked")@Overridepublic 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;@Overridepublic void initView(View convertView) {menu = (TextView) convertView.findViewById(R.id.menu);}@Overridepublic 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);
但是这并不是很通用,在条目中有按钮要被按的话就不好用了,还有有多种布局是不好用。
这篇关于抽取BaseAdapter,省代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!