android 一个公共的适配器,简化适配器代码
2015-08-18 15:22
411 查看
在adapter的基础上封装一层,继承BaseAdapter,省去了adapter立面很多代码,用起来很方便
下面来看看怎么去继承这个adapter用吧
不需要再每个适配器的getView()方法里面写很多的代码啦,赶紧试试吧,欢迎指点批评
import java.util.ArrayList; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; /*** * adapter父类 */ public abstract class BaseAutoAdapter extends BaseAdapter{ //引入view的id private int itemLayoutId; //适配器立面需要绑定数据的控件id private int[] childViewIds; //引入view private LayoutInflater inflater; public AutoBaseAdapter(Context context, int itemLayoutId, int... childViewIds) { inflater = LayoutInflater.from(context); this.itemLayoutId= itemLayoutId; this.childViewIds = childViewIds; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = null; ViewHolder holder = null; if (convertView != null) { view = convertView; holder = (ViewHolder) view.getTag(); } else { view = inflater.inflate(itemLayoutID, null); holder = new ViewHolder(); for (int childId : childViewIds) { holder.cacheView(view.findViewById(childId)); } view.setTag(holder); } boundDataAndEventToViews(position, view, holder.getCacheViews()); return view; } /** * 抽象方法, 被子类覆盖, 将业务相关的数据和事件绑定到特定的子View上 */ protected abstract void boundViews(int position, View itemView, ArrayList<View> childViews); private static class ViewHolder { private ArrayList<View> cachedViews = new ArrayList<View>(); public void cacheView(View view) { cachedViews.add(view); } public ArrayList<View> getCacheViews() { return cachedViews; } } }
下面来看看怎么去继承这个adapter用吧
import java.util.ArrayList; import java.util.List; import com.cn.activity.R; import android.content.Context; import android.view.View; import android.widget.TextView; /** *一个普通的适配器继承上面的那个封装适配器 */ public class TextAdapter extends BaseAutoAdapter{ public TextAdapter (Context mContext) { //传入itemid和控件id即可 super(mContext, R.layout.item, R.id.textView,R.id.button); } @Override public int getCount() { return 0; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override protected void boundViews(int position, View itemView, ArrayList<View> childViews) { //这里注意,不需要再声明控件了,直接从childViews里面取,根 据传入的控件顺序依次去取,一定要对应好传入的控件类型和取出来强转的类型 ((TextView)childViews.get(0)).setText("第一个控件"); ((Button)childViews.get(1)).setText("第二个控件"); }
不需要再每个适配器的getView()方法里面写很多的代码啦,赶紧试试吧,欢迎指点批评
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories