Adapter的实现
Adapter概念:
Adapter是连接后端数据和前端显示的适配接口,是数据和UI(View)之间一个重要的纽带。在常见的View(ListView, GridView)等地方都需要用到Adapter。相当于ios里面tableView,collection的DataSource.我们在使用过程中可以根据自己的需求实现接口或者继承类进行一定的扩展。比较常用的有 Base Adapter,Impleader,Adapter,Counteradaptation等。
常用Adapter:
BaseAdapter是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性;
ArrayAdapter支持泛型操作,最为简单,只能展示一行字;
SimpleAdapter有最好的扩充性,可以自定义出各种效果;
SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应起来。如需要实现更复杂的UI也可以重写其他方法。可以认为是SimpleAdapter对数据库的简单结合,可以方便地把数据库的内容以列表的形式展示出来。
在此对BaseAdapter用法进行详细介绍。
- 首先创建一个类继承BaseAdapter
public class ItemBaseAdapter extends BaseAdapter {
// data 要显示的数据源
public List<Item> itemList;
private LayoutInflater inflater;
//init 构造函数初始化 context为当前的上下文
public ItemBaseAdapter(Context context, List<Item> data){
this.inflater = LayoutInflater.from(context);
this.itemList = data;
}
}
// 重写父类方法
// 返回数据源数量
@Override
public int getCount() {return itemList.size();}
// 返回的是该position对应的item,即获得相应数据集合中特定位置的数据项
@Override
public Object getItem(int position) {
return null;
}
// 它返回的是该postion对应item的id, 相当于ios tableView的 indexPath
@Override
public long getItemId(int position) {
return 0;
}
// 返回了每个item项所显示的view,该view在layout里自定义布局,可重用,相当于tableView自定义的cell
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//创建ViewHolder 实例并赋值
ItemViewHolder holder = null;
if (convertView == null) {
holder = new ItemViewHolder();
convertView = inflater.inflate(R.layout.item_view, null);
holder.title = (TextView)convertView.findViewById(R.id.title);
holder.desc = (TextView)convertView.findViewById(R.id.desc);
holder.imageView = (ImageView)convertView.findViewById(R.id.image);
holder.price = (TextView)convertView.findViewById(R.id.price);
// 设置视图层次结构
convertView.setTag(holder);
} else {
holder = (ItemViewHolder)convertView.getTag();
}
holder.title.setText(itemList.get(position).getTitle());
holder.desc.setText(itemList.get(position).getDesc());
holder.price.setText(price);
String url = itemList.get(position).getCoverImageUrl();
// MARK: inflater.getContext()获取当前的上下文
// 用Picasso框架异步加载网络图片
Picasso.with(inflater.getContext()).load(url).placeholder(R.drawable.placeholder).error(R.drawable.placeholder).into(holder.imageView);
}
return convertView;
}
2.创建ViewHolder类,属性是所有要显示在View上的控件。相当于ios里面的在storyboard里拖一个线到view上,把控件与view相关联。
public final class ItemViewHolder {
public TextView title;
public TextView desc;
public ImageView imageView;
public TextView price;
}
4.运用BaseAdapter。
在继承与Fragment的类里面创建BaseAdapter的实例,并传入数据源,就可以让Fragment显示自定义的布局和数据.
// 创建ItemBaseAdapter的实例
BaseAdapter adapter = new ItemBaseAdapter(getActivity(),items);
// 设置gridView的adapter
item_grid.setAdapter(adapter);
以上就是BaseAdapter的基本使用。
Adapter的实现的更多相关文章
- 设计模式(七): 通过转接头来观察"适配器模式"(Adapter Pattern)
在前面一篇博客中介绍了“命令模式”(Command Pattern),今天博客的主题是“适配器模式”(Adapter Pattern).适配器模式用处还是比较多的,如果你对“适配器模式”理解呢,那么自 ...
- 设计模式(七)适配器模式(Adapter Pattern)
一.引言 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将“将现存的对象”在新的环境中进行调用 ...
- ListView和Adapter数据适配器的简单介绍
ListView 显示大量相同格式数据 常用属性: listSelector listView每项在选中.按下等不同状态时的Drawable divider ...
- Android之RecyclerView的原生Bug-Inconsistency detected. Invalid view holder adapter positionViewHolder{a1bbfa3 position=2 id=-1, oldPos=-1, pLpos:-1 no parent}
今天在运行自己编写的App时,突然发现App在运行时闪退,然后就查看了Android Studio的Log,发现了这个错误,上网查了一下,才知道是RecyclerView的原生Bug,在数据更新时会出 ...
- Android——Adapter
Adapter——本身只是一个接口.Adapter是将数据绑定到UI界面上的桥接类.Adapter负责创建显示每个项目的子View和提供对下层数据的访问. 数据适配器作用:把复杂的数据(数组.链表.数 ...
- 设计模式--适配器模式Adapter(结构型)
一.适配器模式 适配器模式的主要作用是在新接口和老接口之间进行适配.将一个类的接口转换成客户端期望的另外一个接口.其实适配器模式有点无赖之举,在前期设计的时候,我们就不应该考虑适配器模式,而应该通过重 ...
- Android 利用RecyclerView.Adapter刷新列表中的单个view问题
首先使用RecyclerView的adapter继承:RecyclerView.Adapter public class OrderListAdapter extends RecyclerView.A ...
- oracle plsql 无法连接 报 ORA-12560: TNS:protocol adapter error
ORA-12560: TNS:protocol adapter error 添加一个环境变量,名为TNS_ADMIN,值为 tnsnames.ora 文件所在路径.比如我的本机为:D:/instant ...
- C#设计模式系列:适配器模式(Adapter)
在实际的软件系统设计和开发中,为了完成某项工作需要购买一个第三方的库来加快开发.这带来一个问题,在应用程序中已经设计好的功能接口,与这个第三方提供的接口不一致.为了使得这些接口不兼容的类可以在一起工作 ...
- Net设计模式实例之适配器模式(Adapter Pattern)
一.适配器模式简介(Brief Introduction) 适配器模式,将一个类装换成客户期望的另外一个接口.Adapter模式使的原本由于接口不兼容而不能工作的那些类可以一起工作. 二.解决的问题( ...
随机推荐
- rabbitmq AmqpClient 使用Direct 交换机投递与接收消息,C++代码示例
// 以DIRECT 交换机和ROUTING_KEY的方式进行消息的发布与订阅 // send // strUri = "amqp://guest:guest@192.168.30.11:8 ...
- ivew 绑定时间控件
<FormItem label="开始时间" style="width: 100%" prop="startDate"> < ...
- bzoj5210 最大连通子块和 动态 DP + 堆
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5210 题解 令 \(dp[x][0]\) 表示以 \(x\) 为根的子树中的包含 \(x\) ...
- 一次Linux服务器空间满的随笔解决记录
昨天突然无法上传文件到服务器上的,FTP工具总是到99%就卡住了.查了一下说可能是服务器满了. 赶紧用 df -h 命令查看空间使用情况.果然100%了. 想想上次查询才不到50%,怎么突然就满了了呢 ...
- 如何使用Keka for Mac提取受密码保护的文件?用Keka提取文件的格式
如何使用Keka for Mac提取受密码保护的文件?keka Mac是很多人喜欢的压缩解压工具,以小巧,使用简单,界面简洁受到很多Mac用户的喜欢,你还可以使用它提取文件,下面我们就来介绍一下关于用 ...
- iview input实现默认获取焦点并选中文字
1. 业务背景 配置页面,可新建和复制任务:当复制任务的时候,要把名字的input框默认获取焦点,并全选任务名.效果如下: 2. 代码实现 <template> <Form :mod ...
- 剑指offer---4、序列化二叉树
剑指offer---4.序列化二叉树 一.总结 一句话总结: 1. 对于序列化:使用前序遍历,递归的将二叉树的值转化为字符,并且在每次二叉树的结点不为空时,在转化val所得的字符之后添加一个' , ' ...
- (60)c# com com+ dcom
一.创建COM组件 1.创建项目 2.设置使程序集可见 AssemblyInfo.cs中flase改为ture 或者 项目属性 设置可见 3.Guid生成器 在开始程序下能够找到Guid生成器 每次都 ...
- 如何消去delphi Stringgrid重绘时产生重影
procedure TForm1.Stringgrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGrid ...
- 读取 appsettings.json
Appsettings.json 配置: 个配置文件就是一个json文件,并且是严格的json文件,所有的属性都需要添加“”引号.下图是一个常规的代码示例: {"UrlString" ...