Android适配器作用

Android适配器作用AndroidAdapter适配器Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。Android中有很多的适配器,首先看看这些适配器的继承结构Data、Adapter、View三者的关系  Data、Adapter、View三者的关系一个li

大家好,又见面了,我是你们的朋友全栈君。

Android Adapter适配器

Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。

Android中有很多的适配器,首先看看这些适配器的继承结构

Android适配器作用

Data、Adapter、View三者的关系
  Android适配器作用
Data、Adapter、View三者的关系

一个listAdapter用来管理一个用一组任意对象的数组填充的ListView。
ListAdapter列表项的显示配置:
一、 通过简单XML文件配置
默认的ListAdapter希望提供的ListView每一项的 xml布局配置文件中只有一个TextView。
构造函数:public ArrayAdapter (Context context, int textViewResourceId)
  context: 当前的上下文对象
  textViewResourceId: The resource ID for a layout file containing a TextView to use when instantiating views. 一个包含了TextView的布局xml文件的id,注意(这个布局文件里只能有TextView一个控件,TextView不能有父控件,否则会报错 java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView)
  类似于这种的xml
  <?xml version=”1.0″ encoding=”utf-8″?>
  <TextView android:id=”@+id/subject”
   xmlns:android=”http://schemas.android.com/apk/res/android”
   android:layout_width=”wrap_content” android:layout_height=”wrap_content”
   android:layout_marginTop=”5dip” android:textAppearance=”?android:attr/textAppearanceMedium”
   android:singleLine=”true” android:ellipsize=”end” />
 public ArrayAdapter (Context context, int textViewResourceId, T[] objects)
  objects:用来填充ListView,给ArrayAdapter提供数据的数组
public ArrayAdapter (Context context, int textViewResourceId, List<T> objects) 
//建议使用这个,直接给ArrayAdapter填充了数据
二、 复合布局文件XML配置
如果你想使用一个复合布局的话,你就要使用含有id字段的构造函数了,这个id要去引用这个复杂布局文件 中的一个TextView,TextView被引用了,使用数组中的对象,调用toString方法,转换成字符串来填充这个TextView,你可以使 用包含自定义对象的数组或者集合。重写自定义对象的toString()方法,来保证ListView显示。
public ArrayAdapter (Context context, int resource, int textViewResourceId)
这个是用来复杂布局的,ListView的Item项的布局文件中不止含有一个TextView控件
  resource: The resource ID for a layout file containing a layout to use when instantiating views. ListView中Item项的复杂布局xml文件
  textViewResourceId:The id of the TextView within the layout resource to be populated(显示) ListView中Item项的复杂布局xml文件中用来显示ArrayAdapter中数据的那个TextView
public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)
public ArrayAdapter (Context context, int resource, int textViewResourceId, List<T> objects)
//建议使用这个,直接给ArrayAdapter填充了数据。
  方法:
  这个方法能够使用数组xml文件中配置的数据来创建一个ArrayAdapter,这个数组中的内容如何获得,通过this.getResources().getTextArray(id)方法获得。
  自定义数组xml文件的标识id号,也就是ArrayAdapter要绑定到ListVIew中的数据
textViewResourceId:用于显示数组数据的布局文件的id标识号(注意:该布局文件中只能有一个TextView,有多个就会报错,一般是 ClassCastException)
三、 通过重写Adapter的getView方法来得到你想要的view。
你也可以是使用其他的一些非TextView 控件来显示数组中的数据,通过重写Adapter的getView方法来得到你想要的view。
public View getView(int position, View convertView, ViewGroup parent) { 
ViewHolder holder; 
if (convertView == null) { 
convertView = mInflater.inflate(R.layout.list_item_icon_text, null); 
holder = new ViewHolder(); 
holder.text = (TextView) convertView.findViewById(R.id.text); 
holder.icon = (ImageView) convertView.findViewById(R.id.icon); 
convertView.setTag(holder); 
} else { 
holder = (ViewHolder) convertView.getTag(); 

holder.text.setText(DATA[position]); 
holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2); 
return convertView; 
}

static class ViewHolder { 
TextView text; 
ImageView icon; 
}

BaseAdapter是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性
构造一个Adapter:
public class xxxxAdapter extends BaseAdapter { 

private Context context; 
private List<xxxx> xxxxList; 

public xxxxAdapter(Context context, List<xxxx> weatherList ) { 
this.context = context; 
this.xxxxrList = xxxxList; 

//1.先判断adapter 有多少数据项,根据这个数据确定有多少item.
public int getCount() { 
return xxxxList!=null? xxxxList.size() :0; 

public Object getItem(int position) { 
return xxxxList.get(position); 

public long getItemId(int position) { 
return position; 

//2 确定每个item里加载哪个View
public View getView(int position, View convertView, ViewGroup parent) { 
参考上面

最近做个项目,要用到异步加载,动态刷新UI等。看了下2.2系统的图库源码,感觉写的不错。同时又把ListView拿出来研究了下,做个笔记。

      先上图:

Android适配器作用

1. Android中大量用到了适配器模式,比如ListView、GridView等。

    所谓的适配器模式,我的理解是类似电源适配器或者转接头之类的转换器。

    电源适配器将不适合机器工作的电压输出为机器适合的电压。转接头就更好理解了,将不配套的插头和插座连接在一起。适配器模式跟这个类似,将两个不相干的类作用在一起,使它们能配套适用。

Android适配器作用

      Android里面的适配器结构基本如上图所示。还有其他的各种适配器类如SimpleAdapter,SimpleCursorAdapter等都是直接或间接地继承BaseAdapter。我们自定义ListView时所用到的Adapter同样要继承BaseAdapter必须实现几个方法:getCount(),getItem(int position),getItemId(int position),getView(int position, View convertView, ViewGroupparent)

为什么会这样呢?

       注意到Spinnerdapter和ListAdapter都是接口,它们继承了Adapter接口。而BaseAdapter是一个抽象类,它实现上述两个接口,但它并没有实现上面提到的那四个方法。所以构建BaseAdapter的子类时必须要实现那四个没有实现的四个接口方法。其实在Android中有很多这样的例子,在继承某个类时会默认让你Override一些方法,这些方法就是父类中没有实现的接口方法。

         重写了这四个方法后适配器才能够和控件合作,将数据和控件UI联系起来。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/130642.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 傅里叶变换一步步详细推导「建议收藏」

    傅里叶变换一步步详细推导「建议收藏」前言在大学的时候接触过几次傅里叶变换的知识,但是从来没真正懂过.也在网上找过很多资料,看过很多视频,但是,这些内容要么举些简单的例子说说直观上的理解,要么就是直接堆出公式没有任何推导.直到一个巧合在B站上看到这样一个视频才真正搞懂,非常感谢这位UP主DR_CAN.这篇博客也主要是对视频中的推导模仿一遍.同时记录下笔记方便复习.另外,记录当时一条印象很深的弹幕:根本就没有人会学不懂数学,只是…

  • 《架构之美》笔记_印象笔记如何创建目录

    《架构之美》笔记_印象笔记如何创建目录美是创造矛盾并解决矛盾。架构的多关注点(例如业务逻辑、系统扩展性、持久、并发)和简洁性就是一种矛盾,美丽的架构能解决这种矛盾,使人内心产生愉悦;随着关注点的增加,架构也在不断演进;术:分层、组件化、服务化、标准化、缓存、分离、队列、复制、冗余、代理;道:如何恰到好处地使用术,例如顿悟变化的道理、博弈中寻找平衡、相对与绝对的奥秘、开放的心态;爱因斯坦说:『让它尽可能简单,但不要过于简单』,美

  • java常量有哪些_JAVA常量介绍「建议收藏」

    java常量有哪些_JAVA常量介绍「建议收藏」常量:在程序执行过程中,其值不发生改变的量;1、分类:字面值常量和自定义常量;1、字面值常量有以下几种:字符串常量、小数常量、整数常量、字符常量、布尔常量(true、false)、空常量(null);2、整数常量的表现形式:二进制:由0、1组成,以0b开头;八进制:由0,1,….7组成,以0开头;十进制:由0,1,……9组成,整数默认是十进制;十六进制:由0,1,….9,…

  • Insecure default in Elasticsearch enables remote code execution

    Insecure default in Elasticsearch enables remote code execution

  • hadoop怎么分割写入的文件为多个块的,一个map对应一个split分片吗?split与block的关系

    hadoop怎么分割写入的文件为多个块的,一个map对应一个split分片吗?split与block的关系hadoop怎么分割写入的文件为多个块的,一个map对应一个split分片吗?split与block的关系

  • 小程序开发毕业设计_基于小程序的毕业设计

    小程序开发毕业设计_基于小程序的毕业设计基于微信小程序的培训机构系统前言:该系统作为本科毕业设计,可能还有很多的不足。只是当时做这个系统的时候,由于需要使用java语言作为后端实现与微信小程序界面数据交互,看遍网上很多的案例基本后台都是php语言用于编写接口,几乎没找到过java作为后台语言的案例。写这篇博客只是为了帮助需要后台使用java语言来实现的朋友。一、项目介绍微信小程序端:小程序端管理员实现对信息模块的管理,包含课程…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号