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模式使的原本由于接口不兼容而不能工作的那些类可以一起工作. 二.解决的问题( ...
随机推荐
- json字符串处理—Json&C#
C# 转自:https://blog.csdn.net/sajiazaici/article/details/77647625# 本文是全网第二简单的方法,因为我女票也发了一篇博客说是全网最简单的方法 ...
- jenkins持续集成(一): 在Linux下的安装与配置
撸了今年阿里.网易和美团的面试,我有一个重要发现.......>>> 前提: 安装了JDK,并配置好环境变量:JAVA_HOME 安装了Maven,并配置好环境变量:MAVEN_HO ...
- HTML5 canvas绘制图形
demo.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- 微软Cortana可以帮助任何人解锁您的Windows 10系统
Cortana是微软在每个版本的Windows10中都内置的基于人工智能的智能助手,可以帮助攻击者解锁你的系统密码. 在周二发布的最新补丁中,微软推出了一项重要更新,以解决Cortana中容易被利用的 ...
- python socket基本连接功能实现
socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信 在应用中,要写两个程序来通信,一个是服务器端程序,一个是客户端程序 ...
- SpringBoot---提供的自动配置
1.自动配置的ViewResolver 1.1.ContentNegotiatingViewResolver 1.2.BeanNameViewResolver 1.3.InternalResource ...
- NET Core+win10+Jenkins+Gogs+open ssh持续集成
背景 阿里云测试环境一台,带宽1M跟不上,Jenkins安装一个插件耗时很长,于是想在本地搭建Jenkins服务,将生成的安装文件同步到目标服务器上. 技术点有: win10:本地环境是win10,测 ...
- js 最短代码生成随机数(字符串、id)
以生成8位字符串为例 Math.random().toString(36).substr(-8)
- 【转】从phpMyAdmin批量导入Excel内容到MySQL(亲测非常简洁有效)
今天做项目遇到需要用phpMyAdmin批量导入Excel内容到MySQL数据库.分析了我的踏坑经历并且总结一最便捷的一套导入数据的方法,非常实用简洁: 1.修改Excel表的数据,使得Excel中的 ...
- flask-路转换器
from flask import Flask, render_template from werkzeug.routing import BaseConverter # 配置regex路由转换器 # ...