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模式使的原本由于接口不兼容而不能工作的那些类可以一起工作. 二.解决的问题( ...
随机推荐
- poland 波兰 时区
http://www.timeofdate.com/country/Poland 2019年 ~ 2020年波兰夏令时开始结束时间 年份 日期 类型 2019 2019-3-31 夏令时开始 20 ...
- 【LeetCode】深搜DFS(共85题)
[98]Validate Binary Search Tree [99]Recover Binary Search Tree [100]Same Tree [101]Symmetric Tree [1 ...
- win10搭建ftp环境
1.进入程序,并点击“启用或关闭windows功能” 2.勾选对应的功能,并点击“确定” 3.进入IIS 4.如下图 5.如图 6.如图 7.如下图 8.创建新用户,用于登录ftp(自行创建) 9.禁 ...
- Hibernate 一对多配置 级联操作(级联失败问题分析解决)
一方: package com.xdfstar.domain; import java.io.Serializable;import java.util.Date;import java.util.H ...
- Calendar日历
Calendar calendar=Calendar.getInstance(); //上一年的今天 calendar.add(Calendar.YEAR,-1); System.out.printl ...
- CreateJS入门 -- 注释详细到爆炸(My Style)
写在前面 首先,还是谢谢大家的支持,谢谢!记得在之前的文章中我说过自己算是一个半文艺程序员,也一直想着写一写技术性和其他偏文学性的文章.虽然自己的底子没有多么优秀,但总是觉得这个过程中可以督促自己去思 ...
- JavaSE---锁
1.概述 java中提供了种类丰富的锁, 每种锁因其特性不同,在合适的场景下发挥非常高的效率:
- 通过ssh访问虚拟机中的ubuntu系统
首先把 network 连接方式由 NAT 改为 Bridge Adapter,这样虚拟机中的 ubuntu 就可以有独立的 IP 地址. 安装 openssh: sudo apt-get insta ...
- Python的pip源切换为国内阿里云镜像
Python的pip源切换为国内阿里云镜像 找到用户目录 C:\Users\用户\pip,如果不存在就新建该文件夹. 新建文件pip.ini,并用文本编辑器输入以下内容并保存 [global] ind ...
- python不能运行
运行python文件出现,报错please select a valid interpreter 这是因为没有选择interpreter 就是更改目录时需要重新选择pytho解析器 解决方法如下 更 ...