万能适配器2 通用Adapter编写
2015-10-02 11:34
330 查看
上一篇介绍到MyAdapterVieHolder extends BaseAdapter这里,我还是每次写这个Adapter有点烦,我可不可以自定义一个BaseAdapter来减少代码量跟提高效率呢,想到了咱就来写一写吧,
自定义一个Adapter为 CommonAdapter.java
而这样编写后的BaseAdapter当然要应用于MyAdapterViewHolder里啦,这里面的代码就简化为啦这样
我日,现在一看有点小清新啊,爽多了有木有,然后我感觉在MyAdapterViewHolder中的getView中ViewHolder的创建几乎每次都是不变的,那我们可不可以再简化一下
简化后的代码
CommonAdapter.java
而我们的MyAdapterViewHolder.java呢
一看,我日,这才几行代码啊,就是SetText啊,这么简单的话,我直接就不用重写一个类啊,直接在用Adapter的时候new出来就行啦,而且以后如果再用adapter的话,我也可以直接拿过来用,因为我的代码已封装好啦啊
自定义一个Adapter为 CommonAdapter.java
package com.utils; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; /** * BaseAdapter 雏形 * @author Administrator * * @param <T> */ public abstract class CommonAdapter<T> extends BaseAdapter { protected Context mContext; protected List<T> mDatas; protected LayoutInflater mInflater; //布局 public CommonAdapter(Context context,List<T>datas){ this.mContext = context ; this.mInflater = LayoutInflater.from(context); this.mDatas = datas; } @Override public int getCount() { // TODO Auto-generated method stub return mDatas.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return mDatas.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public abstract View getView(int position, View convertView, ViewGroup parent); }
而这样编写后的BaseAdapter当然要应用于MyAdapterViewHolder里啦,这里面的代码就简化为啦这样
package com; import java.util.List; import com.bean.Bean; import com.example.universaladapter.R; import com.utils.CommonAdapter; import com.utils.ViewHolder; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class MyAdapterViewHolder extends CommonAdapter<Bean> { public MyAdapterViewHolder(Context context,List<Bean>datas){ super(context, datas); } @Override public View getView(int position, View convertView, ViewGroup parent) { //初始化ViewHolder ViewHolder holder = ViewHolder.get(mContext, convertView, parent, R.layout.item_listview, position); Bean bean = mDatas.get(position); TextView title = holder.getView(R.id.id_title); title.setText(bean.getTitle()); TextView desc = holder.getView(R.id.id_desc); desc.setText(bean.getDesc()); ((TextView)holder.getView(R.id.id_time)).setText(bean.getTime()); ((TextView)holder.getView(R.id.id_phone)).setText(bean.getPhone()); //注意convertView是在Holder初始化的 !!!!!!这是很重要 return holder.getmConvertView() ; } }
我日,现在一看有点小清新啊,爽多了有木有,然后我感觉在MyAdapterViewHolder中的getView中ViewHolder的创建几乎每次都是不变的,那我们可不可以再简化一下
简化后的代码
CommonAdapter.java
package com.utils; import java.util.List; import com.bean.Bean; import com.example.universaladapter.R; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; /** * BaseAdapter 雏形 * @author Administrator * * @param <T> */ public abstract class CommonAdapter<T> extends BaseAdapter { protected Context mContext; protected List<T> mDatas; protected LayoutInflater mInflater; //布局 public CommonAdapter(Context context,List<T>datas){ this.mContext = context ; this.mInflater = LayoutInflater.from(context); this.mDatas = datas; } @Override public int getCount() { // TODO Auto-generated method stub return mDatas.size(); } @Override public T getItem(int position) { // TODO Auto-generated method stub return mDatas.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent){ //初始化ViewHolder ViewHolder holder = ViewHolder.get(mContext, convertView, parent, R.layout.item_listview, position); convert(holder, getItem(position)); //注意convertView是在Holder初始化的 !!!!!!这是很重要 return holder.getmConvertView() ; } public abstract void convert(ViewHolder holder,T t); }
而我们的MyAdapterViewHolder.java呢
package com; import java.util.List; import com.bean.Bean; import com.example.universaladapter.R; import com.utils.CommonAdapter; import com.utils.ViewHolder; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class MyAdapterViewHolder extends CommonAdapter<Bean> { public MyAdapterViewHolder(Context context,List<Bean>datas){ super(context, datas); } @Override public void convert(ViewHolder holder, Bean bean) { ((TextView)holder.getView(R.id.id_time)).setText(bean.getTime()); ((TextView)holder.getView(R.id.id_phone)).setText(bean.getPhone()); ((TextView)holder.getView(R.id.id_title)).setText(bean.getTitle()); ((TextView)holder.getView(R.id.id_desc)).setText(bean.getDesc()); } }
一看,我日,这才几行代码啊,就是SetText啊,这么简单的话,我直接就不用重写一个类啊,直接在用Adapter的时候new出来就行啦,而且以后如果再用adapter的话,我也可以直接拿过来用,因为我的代码已封装好啦啊
相关文章推荐
- linux at 无法使用的问题
- Java语言基础相关问题
- 第0章 操作系统概念
- socket 、webservices、Json的区别
- UGUI学习笔记3——UI组件
- 本地 push 到github 每次都需要输入用户密码问题
- stl中set和hash_set底层实现详解
- MSF入侵安卓手机
- zw版_Halcon图像库delphi接口文件
- kafka的producer测试
- AIDL调用第三方应用程序服务中的方法
- 界面组件--导航菜单
- kafka安装
- N!
- stl中map和hash_map底层实现详解
- UVa 314 - Robot (bfs)
- 协方差矩阵
- Linux 进程管理(一)
- 黑马程序员-----GUI
- 涌现与自组织的启示