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用法进行详细介绍。

  1. 首先创建一个类继承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的实现的更多相关文章

  1. 设计模式(七): 通过转接头来观察"适配器模式"(Adapter Pattern)

    在前面一篇博客中介绍了“命令模式”(Command Pattern),今天博客的主题是“适配器模式”(Adapter Pattern).适配器模式用处还是比较多的,如果你对“适配器模式”理解呢,那么自 ...

  2. 设计模式(七)适配器模式(Adapter Pattern)

    一.引言 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将“将现存的对象”在新的环境中进行调用 ...

  3. ListView和Adapter数据适配器的简单介绍

    ListView 显示大量相同格式数据 常用属性: listSelector            listView每项在选中.按下等不同状态时的Drawable divider            ...

  4. 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,在数据更新时会出 ...

  5. Android——Adapter

    Adapter——本身只是一个接口.Adapter是将数据绑定到UI界面上的桥接类.Adapter负责创建显示每个项目的子View和提供对下层数据的访问. 数据适配器作用:把复杂的数据(数组.链表.数 ...

  6. 设计模式--适配器模式Adapter(结构型)

    一.适配器模式 适配器模式的主要作用是在新接口和老接口之间进行适配.将一个类的接口转换成客户端期望的另外一个接口.其实适配器模式有点无赖之举,在前期设计的时候,我们就不应该考虑适配器模式,而应该通过重 ...

  7. Android 利用RecyclerView.Adapter刷新列表中的单个view问题

    首先使用RecyclerView的adapter继承:RecyclerView.Adapter public class OrderListAdapter extends RecyclerView.A ...

  8. oracle plsql 无法连接 报 ORA-12560: TNS:protocol adapter error

    ORA-12560: TNS:protocol adapter error 添加一个环境变量,名为TNS_ADMIN,值为 tnsnames.ora 文件所在路径.比如我的本机为:D:/instant ...

  9. C#设计模式系列:适配器模式(Adapter)

    在实际的软件系统设计和开发中,为了完成某项工作需要购买一个第三方的库来加快开发.这带来一个问题,在应用程序中已经设计好的功能接口,与这个第三方提供的接口不一致.为了使得这些接口不兼容的类可以在一起工作 ...

  10. Net设计模式实例之适配器模式(Adapter Pattern)

    一.适配器模式简介(Brief Introduction) 适配器模式,将一个类装换成客户期望的另外一个接口.Adapter模式使的原本由于接口不兼容而不能工作的那些类可以一起工作. 二.解决的问题( ...

随机推荐

  1. MYSQL5.7版本sql_mode=only_full_group_by问题,重启有效的方法

    1./etc/mysql/mysql.conf.d/mysqld.cnf 或者my.cnf   总之就是mysql的配置文件 2.查看当前的sql模式 select @@sql_mode; 3.添加语 ...

  2. Sass-减法

    Sass 的减法运算和加法运算类似,我们通过一个简单的示例来做阐述: 同样的,运算时碰到不同类型的单位时,编译也会报错,如:

  3. maven clean后 编译报错

    <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <config ...

  4. HTTP: 状态码200~505说明

    HTTP状态码(HTTP Status Code) 一些常见的状态码为: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务不可用 所有状态解释: 1xx(临时响应) 表示 ...

  5. Python中的"Special Method"

    The first thing to know about special methods is that they are meant to be called by the Python inte ...

  6. C++ 穷举算法 鸡兔同笼

    #include "stdio.h" int qiongju(int head, int foot, int *chicken, int *rabbit) { int re, i, ...

  7. pgrep,pidof工具的使用

    博客pgrep,pidof工具的使用 最灵活:ps 选项 | 其它命令 按预定义的模式:pgreppgrep [options] pattern-u uid: effective user,生效者-U ...

  8. php strncmp()函数 语法

    php strncmp()函数 语法 作用:比较字符串前n个字符,区分大小写 语法:strncmp(string1,string2,length)直线电机品牌 参数: 参数 描述 string1 必须 ...

  9. iOS设计模式之工厂模式

    一,什么是工厂模式 模式定义: “专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类.” 世界上就是由一个工厂类,根据传入的参数,动态地决定创建出哪一个产品类的实例. 需求场景: 简 ...

  10. 【CF1257B】Magic Stick【思维】

    题意:每次可以对a进行两种操作,1:如果是偶数,则变成3*a/2:2:变成a-1 显然当a=1时,b只能为1 a=2或3时,b只能为123 a>3时,b可以为任意数 代码: #include&l ...