万能适配器和万能ViewHolder配合实现ListView列表数据展示
来源:互联网 发布:淘宝上卖韩妆的正品店 编辑:程序博客网 时间:2024/04/30 04:24
在适配器的getView方法中使用ViewHolder来保存子布局项的组件信息时,传统的做法是:
public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if(convertView == null){ convertView = inflater.inflate(R.layout.listview_item,parent,false); holder = new ViewHolder(); holder.title = (TextView) convertView.findViewById(R.id.title); holder.content = (TextView) convertView.findViewById(R.id.content); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } holder.title.setText(mDatas.get(position).getTitle()); holder.content.setText(mDatas.get(position).getContent()); return convertView; } class ViewHolder{ private TextView title; private TextView content; }
在项目开发中需要编写很多个适配器,那么会有很多重复的代码,若使用万能ViewHolder和万能适配器将会减少很多代码,使用方法见下:
1. 编写万能ViewHolder:
public class CommonViewHolder { private int mPosition; // mViews用于存放界面上的组件 private SparseArray<View> mViews; private View mCconvertView; public CommonViewHolder(Context context, ViewGroup parent,int layoutId,int position){ this.mPosition = position; this.mViews = new SparseArray<>(); this.mCconvertView = LayoutInflater.from(context).inflate(layoutId,parent,false); mCconvertView.setTag(this); } // 获取ViewHolder public static CommonViewHolder getViewHolder(Context context, View convertView, ViewGroup parent, int layoutId, int position){ CommonViewHolder holder; if(convertView == null){ holder = new CommonViewHolder(context,parent,layoutId,position); }else{ holder = (CommonViewHolder)convertView.getTag(); holder.mPosition = position; } return holder; } // 获取convertView public View getConvertView(){ return mCconvertView; } // 用来获取convertview中的组件 组件存在SparseArray中 public View getView(int viewId){ View view = mViews.get(viewId); if(view == null){ view = mCconvertView.findViewById(viewId); mViews.put(viewId,view); } return view; }}
2. 编写万能BaseAdapter适配器代码如下:
public abstract class CommonAdapter<T> extends BaseAdapter{ // 定义这两个属性为protected,是为了让子类能够访问 protected Context mContext; protected List<T> mDatas; public CommonAdapter(Context context,List<T> datas){ this.mContext = context; this.mDatas = datas; } @Override public int getCount() { return mDatas.size(); } @Override public Object getItem(int position) { return mDatas.get(position); } @Override public long getItemId(int position) { return position; } // 在此定义要具体实现的抽象方法 ,让子类去实现 @Override public abstract View getView(int position, View convertView, ViewGroup parent);}
在具体实现适配器时,只需要new一个适配器并且继承CommonAdapter,然后在方法getView中具体去实现代码即可,示例如下:
public class MyBaseAdapter extends CommonAdapter{ public MyBaseAdapter(Context context, List datas) { super(context, datas); } @Override public View getView(int position, View convertView, ViewGroup parent) { CommonViewHolder holder = CommonViewHolder.getViewHolder(mContext,convertView, // 此处使用了万能ViewHolder parent, R.layout.listview_item,position); Bean bean = (Bean) mDatas.get(position); TextView tv1 = (TextView) holder.getView(R.id.title); tv1.setText(bean.getTitle()); TextView tv2 = (TextView) holder.getView(R.id.content); tv2.setText(bean.getTitle()); TextView tv3 = (TextView) holder.getView(R.id.time); tv3.setText(bean.getTitle()); TextView tv4 = (TextView) holder.getView(R.id.tel); tv4.setText(bean.getTitle()); return holder.getConvertView(); }}
这样我们若想再需要BaseAdapter适配器时,也只需要建立自己的Adapter继承CommonAdapter即可,只要在自己定义的Adapter中实现geView方法,不需要每次都去写ViewHolder和BaseAdapter中那些冗余的代码
Activity中只需要调用下面2行代码即可:
MyBaseAdapter adapter = new MyBaseAdapter(MainActivity.this,beanList); listView.setAdapter(adapter);
0 0
- 万能适配器和万能ViewHolder配合实现ListView列表数据展示
- 万能适配器CommonAdapter和ViewHolder
- 万能适配器1 ViewHolder应用于Listview
- 实现(ListView/GridView等)万能数据适配器
- 万能适配器(1) 抽取ViewHolder
- 万能ListView适配器
- Android--ListView--万能适配器
- ListView万能适配器
- ListView万能适配器
- listView 打造万能适配器
- ListView万能适配器CommonAdapter
- ListView 万能适配器
- ListView之万能适配器
- 初级ListView万能适配器
- ListView、GridView万能适配器
- ListView GridView 万能适配器
- 初试ListView万能适配器
- ListView,GridView万能适配器
- iterator & foreach
- SqlServer数据库基础(熊盼)
- kettle中给ktr作业设置日志
- 使用Jmeter进行http接口测试(转载)
- QTP 学习 - 对象库
- 万能适配器和万能ViewHolder配合实现ListView列表数据展示
- 第五周项目1-建立顺序栈算法库
- Jmeter - 录制脚本
- 第五周项目9--斐波那契数列
- 关于DML命令与DDL命令引发的对事物特性的思考
- THE EVILS OF UNITY BUILDS
- MySQL - 正则表达式
- MySQL - 用户变量
- QTP 学习 - 检查点