博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
其简单的通用适配器的定义
阅读量:7072 次
发布时间:2019-06-28

本文共 3097 字,大约阅读时间需要 10 分钟。

连接器android频繁使用,像ListView。GridView,下拉框。。。它们相对频繁使用,

这个博客描述了一个通用适配器。尽管相对简单的。但相对较大的有用。(没有人去创造与适配器)

这个列子创建了一个虚拟的类,在使用时需要被继承,对应的方法。

public abstract class SimpleBaseAdapter
extends BaseAdapter{ //调用类传入的Context Context context //须要的数据,使用泛型; List
data; //构造方法。传入context和数据 public SimpleBaseAdapter(Context context, List
data){ this.context = context; this.data = data == null ? new ArrayList
() : data; } @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { if(position >= data.size()) { return null; } return data.get(position); } @Override public long getItemId(int position) { return position; } //继承类所须要实现的方法,获取列表项的布局id public abstract int getItemRsouce(); //继承类所须要实现的方法。获取列表项的view public abstract View getItemView(int position,View convertView,ViewHolder holder); //适配器中最重要的方法,之所以返回view调用getItemView()这种方法 //是由于返回的view中的子view须要依据实现类中view的id确认 @SuppressWarnings("unchecked") @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if(convertView == null) { convertView = View.inflate(context, getItemRsouce(), null); holder = new ViewHolder(convertView); convertView.setTag(holder); } else{ holder = (ViewHolder) convertView.getTag(); } return getItemView(position, convertView, holder); } //一种新的ViewHolder的写法,之所以这么写。是为了方便 //实现类获取ConvertView中的子view 。HolderView的缓存机制 //使用SparseArray进行缓存 public class ViewHolder{ private SparseArray
views = new SparseArray
(); private View convertView; public ViewHolder(View convertView) { this.convertView = convertView; } @SuppressWarnings("unchecked") public
T getView(int resId) { View v = views.get(resId); if(v == null) { v = convertView.findViewById(resId); views.put(resId, v); } return (T) v; } }}
SimpleBaseAdapter事实上就是对适配器的一种抽象,而且这个抽象类的不同表现用抽象方法

实现。由于实现类必需要实现抽象方法(也能够说实现类是依据抽象方法表现出不同的属性)

SimpleBaseAdapter的实现类:

public class myAdapter extends SimpleBaseAdapter
{ public myAdapter(Context context,List
data){ super(context, data); } @Override public int getItemRsouce() { return R.layout.list_item; //返回次实现类的列表item的xml文件id } //依据id获取view(每一个实现类的id都不一样) @Override public View getItemView(final int position, View convertView, ViewHolder holder) { TextView tv = holder.getView(R.id.title); tv.setText((String) getItem(position)); Button btn = holder.getView(R.id.btn); btn.setText("选择"); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(myAdapter.this.context, "" + position, Toast.LENGTH_SHORT).show(); } }); return convertView; }}

版权声明:本文博主原创文章,博客,未经同意不得转载。

你可能感兴趣的文章
向亲戚朋友解释系列之什么是IP,端口和域名
查看>>
高危预警!移动设备安全面临的5大新型威胁
查看>>
Linux中如何查看显卡硬件信息
查看>>
如何在Linux上检测硬盘上的坏道和坏块
查看>>
网络架构之路(一):目标
查看>>
低功耗M2M市场广阔 芯片设计如何降耗
查看>>
软件定义技术存在哪些限制?
查看>>
拨开数据迷雾:如何理清大数据脉络?
查看>>
Java动态绑定机制的内幕
查看>>
Linux下NMAP常用扫描简介(一)
查看>>
云计算正在改变整个ICT世界
查看>>
seo优化中不容忽视的页面优化
查看>>
DPDK成Linux基金会下开源项目
查看>>
《Oracle高性能自动化运维》一一第2章 Oracle内存体系结构 2.0
查看>>
维基解密曝光CIA新路由器网络攻击方式
查看>>
2016年8月印度电信市场表现
查看>>
股东质疑Alphabet管理 皮查伊2亿美元薪酬惹争议
查看>>
法国轻奢手机品牌HANMAC 解决手机行业创新瓶颈
查看>>
用户数据是关键 欧盟或调查微软收购领英交易
查看>>
制定网络安全计划目标,比方说先……
查看>>