`
libo19881179
  • 浏览: 269856 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

转:Adapter 从源头开始适配!

阅读更多

Adapter在Android中占据一个重要的角色,它是数据和UI(View)之间一个重要的纽带。在常见的View(ListView,GridView)等地方都需要用到Adapter。如图1直观的表达了Data、Adapter、View三者的关系。

未命名

图1 Adapter、数据、UI三者关系(PS:此图来自Google I/O)

一、Android中Adapter

 

Android-Adapter

图2:Android中Adapter类型层级图

由图2我们可以看到在Android中与Adapter有关的所有接口、类的完整层级图。在我们使用过程中可以根据自己的需求实现接口或者继承类进行一定的扩展。比较常用的有 BaseAdapter,ArrayAdapter,SimpleCursorAdapter等。

  • BaseAdapter是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性;
  • ArrayAdapter支持泛型操作,通常需要实现getView方法,特殊情况下(结合数据row id),为了让ui事件相应处理方便点最好重写getItemId;
  • SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应起来。如需要实现更复杂的UI也可以重写其他方法。

二、一个继承BaseAdapter的类的代码段

   1: /**
   2:  * 歌曲列表适配器
   3:  * 
   4:  * @version 2010-11-24 下午05:13:33
   5:  * @author Hal
   6:  */
   7: public class AudioListAdapter extends BaseAdapter {
   8:  
   9:     private Context mContext;
  10:  
  11:     // 歌曲集合
  12:     private ArrayList<Audio> mAudios;
  13:  
  14:     public AudioListAdapter(Context mContext, ArrayList<Audio> mAudios) {
  15:         this.mContext = mContext;
  16:         this.mAudios = mAudios;
  17:     }
  18:  
  19:     @Override
  20:     public int getCount() {
  21:         return mAudios != null ? mAudios.size() : 0;
  22:     }
  23:  
  24:     @Override
  25:     public Object getItem(int position) {
  26:         if ((mAudios != null && mAudios.size() > 0) && (position >= 0 && position < mAudios.size())) {
  27:             return mAudios.get(position);
  28:         }
  29:         return null;
  30:     }
  31:  
  32:     /**
  33:      * 如果集合中的对象数据来自数据库,建议此方法返回该对象在数据库中的ID
  34:      */
  35:     @Override
  36:     public long getItemId(int position) {
  37:         if ((mAudios != null && mAudios.size() > 0) && (position >= 0 && position < mAudios.size())) {
  38:             return mAudios.get(position).getId();
  39:         }
  40:         return position;
  41:     }
  42:  
  43:     @Override
  44:     public View getView(int position, View convertView, ViewGroup parent) {
  45:         //TODO 返回自定的View
  46:     }

 

分享到:
评论

相关推荐

    C#面向对象设计模式纵横谈(7):Adapter 适配器模式(结构型模式) (Level 300)

    3. 被适配者(Adaptee)类:这是原有的、不兼容的接口,需要被适配以适应新的环境。 在C#中,适配器模式可以通过以下几种方式实现: - 类适配器:适配器类继承目标接口并包含对Adaptee的引用。这种方式要求Adaptee...

    C#面向对象设计模式纵横谈(7):Adapter 适配器模式(结构型模式)

    C#面向对象设计模式纵横谈(7):Adapter 适配器模式(结构型模式) 体验课程

    Log-Any-Adapter-FileHandle:日志

    Log::Any::Adapter::FileHandle - 将消息转发到文件句柄的基本 Log::Any::Adapter 概要 use Log::Any qw($log); use Log::Any::Adapter; # Send all logs to Log::Any::Adapter::FileHandle Log::Any::Adapter-&gt;...

    1-7Adapter基础讲解

    在IT行业中,Adapter模式是一种设计模式,它在不同的接口之间起着桥梁的作用,允许不兼容的类协同...通过深入学习“1-7Adapter基础讲解”,你将能够熟练地在实际项目中运用Adapter,解决各种数据展示和接口适配的问题。

    sentinel-spring-webmvc-adapter-1.8.0-API文档-中文版.zip

    赠送jar包:sentinel-spring-webmvc-adapter-1.8.0.jar; 赠送原API文档:sentinel-spring-webmvc-adapter-1.8.0-javadoc.jar; 赠送源代码:sentinel-spring-webmvc-adapter-1.8.0-sources.jar; 赠送Maven依赖信息...

    k8s.gcr.io/prometheus-adapter/prometheus-adapter:v0.9.1

    docker load -i prometheus-adapter-v0.9.1.tar.gz ; docker images |grep k8s.gcr.io/prometheus-adapter/prometheus-adapter

    RxJavaRetrofitAdapter,用于改装2的RXJava 3适配器.zip

    总的来说,RxJavaRetrofitAdapter是一个实用的工具,它简化了从RXJava 2迁移到RXJava 3的过程,减少了对现有Retrofit接口的改动。对于那些依赖于RXJava和Retrofit构建的Android或Java应用,这个适配器提供了平滑过渡...

    vue3移动端适配的解决方案(老方案)

    文件名 "vue3-page-adapter-pc-m" 暗示这是一个包含移动端和桌面端适配的 Vue3 页面示例。可能包含了不同的 CSS 样式文件、媒体查询和自定义组件,用于演示如何在 Vue3 项目中实现跨平台适配。 6. **具体实践**: ...

    Io 异常: The Network Adapter could not establish the connection

    NULL 博文链接:https://lbay.iteye.com/blog/784874

    Android listview例子, 自定义Adapter:含Button控件

    在本示例中,我们关注的是如何在ListView中集成Button控件,并通过自定义Adapter来实现这一功能。这涉及到Android UI设计、数据绑定和事件处理等多个方面。 首先,我们了解ListView的基本原理。ListView通过Adapter...

    Adapter 适配器

    在软件设计模式中,Adapter(适配器)模式是一种常用的设计模式,它的主要作用是将两个不兼容的接口之间进行适配,使得原本无法协同工作的类可以一起工作。适配器模式可以分为类适配器模式和对象适配器模式。在这里...

    android adapter详解

    Android Adapter 详解 Android Adapter 是 Android 开发中一个重要的组件,负责将数据绑定到用户界面中。今天,我们将深入探讨 Android Adapter 的原理和实现方式。 什么是 Android Adapter? Android Adapter 是...

    适配器模式adapter,含源码下载

    3. 适配器类(Adapter):作为目标接口和适配者类之间的桥梁,实现了目标接口,并持有对适配者类的引用,将适配者类的接口转换为客户期望的目标接口。 源码中的适配器实现可能包括以下几个步骤: 1. 定义目标接口:...

    Android:View&Adapter

    Adapter是连接数据源与View的中介,它负责将数据适配成适合显示在View中的形式。在Android中,有多种Adapter的实现,如BaseAdapter、ArrayAdapter、CursorAdapter等。Adapter的主要职责是获取数据源中的数据,将其...

    android之各种Adapter加载数据

    1. **BaseAdapter**:这是所有Adapter的基类,开发者可以自定义此类来适配自己的数据模型。你需要重写`getCount()`返回数据集的大小,`getItem(int position)`获取指定位置的数据项,`getView(int position, View ...

    website:Adapter-Hub网站

    Adapter-Hub网站 该存储库构建了我们的网站 。 它由Flask, ,Bootstrap和GitHub Pages提供支持。 探索页面的所有内容均从提取。 所有内容贡献都应在此处进行。 建造 :hammer_and_wrench: 克隆此存储库并更新来自...

    esper_adapter_reference

    - **输入Adapter**:负责从外部数据源读取事件,并将其转换成Esper可以理解的事件格式。 - **输出Adapter**:负责将Esper处理后的事件发送到外部系统,如数据库、消息队列等。 #### 1.1 Adapter Library Classes ...

    C++设计模式代码资源16_Adapter.zip

    - 适配器类(Adapter):实现了目标接口,同时持有适配者类的实例,将适配者类的方法转换为目标接口的方法。 - 客户端(Client):使用适配器类来调用适配者类的方法,而无需知道适配的具体过程。 适配器模式的应用...

    prometheus-adapter:v0.10.0

    prometheus-adapter:v0.10.0

    万能Adapter

    在Android开发中,Adapter是一个非常重要的组件,它作为数据源和UI展示之间的桥梁,使得数据能够适配并显示在各种视图控件中,如ListView、GridView、RecyclerView等。"万能Adapter"的设计理念是为了简化开发者的...

Global site tag (gtag.js) - Google Analytics