Android中 的各种Adapter 整理

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
     今天看到别人的技术博客中,把以前学到的小知识点,都在后面的实例中引用起来了,觉得这样非常好。以后的学习当中也要把所有知识都串连起来、用起来,而不是重复的学习相同的知识,这就要求把自己掌握的知识进行整理,清晰的明白哪些已经被掌握了。
   
 好,下面进入今天的正题:
    我们知道用ListView这个控件来显示数据是采用MVC框架, 《老罗Android》学习之UI ListView、MVC模式 , 它要Adapter为它来提供要显示的数据,而Adapter的类型有多种,例如ArrayAdapter、SimpleAdapter和SimpleCursorAdapter等。今天我们就来整理一下 各种Adapter为ListView提供数据的方法。

 ListView的创建,一般要具备两大元素:

       1)数据集,即要映射的字符串、图片信息之类。

       2)适配器,实现把要映射的字符串、图片信息映射成视图(如Textview、Image等组件),再添加到ListView中。

            
  Adapter在Android开发中占据着非常重要的地位,它是data和ui之间的一个关键。先看下Adapter的层次:
     
1. Adapter是在android.widget中的一个顶层接口,下面有诸多不同的Adapter实现这个接口来达到不同的目的。
    ListAdapter绑定了Data和ListView;SpinnerAdapter绑定了Data和Spinner,两个都是接口,需要实现。这两者以后的实现类,使用方法都是一样的,只是在绑定不同类型的view时显示的效果不同罢了。
    其中最常用的有BaseAdapter,SimpleCursorAdapter和ArrayAdapter。
1.1    BaseAdapter 
    BaseAdapter 是抽象类,需要实现好多的抽象方法,当然,也说明它的可控制性最强,可以自定义很多需要的东西。它的实现方法:BaseAdapter的使用
 它的方法如下图所示:
  

1.2   SimpleCursorAdapter
     SimpleCursorAdapter,可以用于纯文字的ListView,它必须使Cursor的字段和UI的界面元素id对应起来。非常的适合于数据库的数据提取,所以被广泛用于各种数据库相关界面。
它的构造函数:simpleCursorAdapter(Context context, int layout, Cursor c,String[] from, int[] to) 
context    与其关联的上下文
layout      listview或者spinnerview所在的layout
c             cursor
from         列名称所组成的string数组
to            与列名称,即数组元素所对应的界面元素,from与to要一一对应,不然结果无法正确显示
示例代码:
 db= (new Chapter22Db (getApplicationContext())).getWritableDatabase();    
 cursor =db.rawQuery("SELECT _id,Name,Weight from mytable ORDER BY Weight", null);
 //layout/chapter_22_test1.xml的Android XML文件定义了ListView中每个单元的排列方式,每个单元R.id.c22_name和R.id.c22_gravity都是TextView,分列左右
 adapter = new SimpleCursorAdapter(this,R.layout.chapter_22_test1,cursor, 
           new String[]{"Name","Weight"},//游标数据的名称,实际是Table列名字
           new int[]{R.id.c22_name, R.id.c22_gravity});//对应的UI微件的id
   setListAdapter(adapter);

1.3  ArrayAdapter
     ArrayAdapter(数组适配器)一般用于显示文本信息,默认情况下,ArrayAdapter绑定每个对象的toString值到layout中预先定义的TextView控件上。所以比较容易。
 示例代码:  

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
            this,android.R.layout.arrayadapter_layout,getData());
    listView.setAdapter(adapter);

private ArrayList<String> getData()
{
    list.add("180平米的房子");
    list.add("一个勤劳漂亮的老婆");
    list.add("一辆宝马");
    list.add("一个强壮且永不生病的身体");
    list.add("一个喜欢的事业");
    return list;
}
通常我们使用Android提供的资源,除了例子中所用的,常用的还有如下几种,可实现带RadioButtonCheckBoxListView

1.3.1   通过指定android.R.layout.simple_list_item_checked这个资源,实现带选择框的ListView。需要用setChoiceMode()方法设定选择为多选还是单选,否则将不能实现选择效果实现代码如下:

lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked, strs));
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
1.3.2   通过指定 android.R.layout.simple_list_item_multiple_choice 这个资源实现带 CheckBox ListView 。同样的,需要用 setChoiceMode() 方法来设置单选或者多选 实现代码如下:
lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice, strs));
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
1.3.3  

通过指定android.R.layout.simple_list_item_single_choice这个资源实现带RadioButtonListView。这里要注意的是,这里并不是指定了单选。是多选还是单选要通过setChoiceMode()方法来指定。

实现代码如下:


lv.setAdapter(newArrayAdapter<String>(this,android.R.layout.simple_list_item_single_choice,strs));
lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
 以下分别为带选择框的ListView、带CheckBox的Listview和 带RadioButton的ListView的效果图:

 在前面讲到过, ListView 的职责除了填充数据外,还要处理用户的操作。通过如下的代码就可以为 ListView 绑定一个点击监听器,点击后在标题栏显示点击的行数。
lv.setOnItemClickListener(new OnItemClickListener() {
    publicvoid onItemClick(AdapterView<?> arg0, View arg1, int arg2,
            long arg3) {
      //点击后在标题上显示点击了第几行                    
      setTitle("你点击了第"+arg2+"行");
    }
});

1.1.4 SimpleAdapter
很多时候需要在列表中展示一些除了文字以外的东西,比如图片等。这时候可以使用SimpleAdapterSimpleAdapter的使用也非常简单,同时它的功能也非常强大。
可以通过它自定义ListView中的item的内容,比如图片、多选框等。看一个例子,实现一个每一行都有一个ImageViewTextViewListView
  

首先在布局文件中增加一个ListView控件。 还需要定义一个ListView中每一行的布局,用RelativeLayout来实现一个带两行字和一个图片的布局,item.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
    <ImageView
        android:id="@+id/ItemImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true" />
    <TextView
        android:id="@+id/ItemTitle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="20sp" />
    <TextView
        android:id="@+id/ItemText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/ItemTitle" />
</RelativeLayout>
 配置完毕,就可以在 Java 代码中为 ListView 绑定数据。
publicclass MyListViewSimple extends Activity {    
    private ListView lv;   
    publicvoid onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        lv = (ListView) findViewById(R.id.lv);         
        ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String,Object>>();/*在数组中存放数据*/
        for(int i=0;i<10;i++)  
        {  
            HashMap<String, Object> map = new HashMap<String, Object>();  
            map.put("ItemImage", R.drawable.icon);//加入图片            
            map.put("ItemTitle", "第"+i+"行");  
            map.put("ItemText", "这是第"+i+"行");  
            listItem.add(map);  
        } 

        SimpleAdapter mSimpleAdapter = new SimpleAdapter( this,listItem,R.layout.item,new String[] {"ItemImage","ItemTitle", "ItemText"},   
                new int[] {R.id.ItemImage,R.id.ItemTitle,R.id.ItemText});
        lv.setAdapter(mSimpleAdapter);//为ListView绑定适配器 
        lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            publicvoid onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                setTitle("你点击了第"+arg2+"行");//设置标题栏显示点击的行                
            }
        });
    }
}

 使用simpleAdapter的数据一般都是用HashMap构成的列表,列表的每一节对应ListView的每一行。通过SimpleAdapter的构造函数,将HashMap的每个键的数据映射到布局文件中对应控件上。这个布局文件一般根据自己的需要来自己定义。梳理一下使用SimpleAdapter的步骤。

1)根据需要定义ListView每行所实现的布局。

2)定义一个HashMap构成的列表,将数据以键值对的方式存放在里面。

3)构造SimpleAdapter对象。

4)将LsitView绑定到SimpleAdapter上。



关于Android Fragment、RecyclerView、Adapter、Holder (作为一个初学者对于Android 控件的学习与整理,前段时间也一直没太搞明白这四个的关联,就只知道网上拷贝代码来修改,今天整理并记录一下,内容简单并不深入,欢迎各位大佬补充) 阅读详情

相关推荐

AndroidAdapter用法总结

1.概念         Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。在常见的View(ListView,GridView)等地方都需要用到Adapter。如下图直观的表达了Data、Adapter、View三者的关系: Android中所有的Adapter一览:         由图可以看到在Android中与Adapter有关的

出头天 3438

Android适配器完全指南:从入门到精通

Android适配器(Adapter)是连接数据与UI的重要桥梁,主要分为四种类型:1)ArrayAdapter适用于简单文本列表;2)SimpleAdapter支持多元素简单列表;3)BaseAdapter实现完全自定义列表,需配合ViewHolder优化性能;4)RecyclerView.Adapter是推荐的高性能解决方案,支持复杂布局和动画。适配器通过管理数据、绑定视图和复用列表项来提高效率,更新数据时需调用相应通知方法。开发中应根据需求选择合适的适配器类型,其中RecyclerView.Adapt

上市公司前技术负责人,20 年软硬件深耕 + 百人研发团队管理经验,名校理工科背景加持。从技术攻坚到团队掌舵,沉淀海量项目实战与管理心得,专注分享软硬件干货、疑难问题解决方案,既是靠谱知识传播者,也盼链接优质项目共成长。 628

Android中的各种Adapter

1.概念         Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。在常见的View(ListView,GridView)等地方都需要用到Adapter。如下图直观的表达了Data、Adapter、View三者的关系: Android中所有的Adapter一览:         由图可以看到在Android中与

张勤一 2092

Android——adapter解读

本篇文章将以常用的RecyclerView的适配器为例来,解读以下adapter,让读者能够更加清晰的了解adapter的实现原理从而灵活运用.

yunyanchengyu114的博客 1万+

Android通用Adapter整理

通用Adapter整理

太湖之子 437

ListView配合安卓适配器Adapter和迭代器Iterator的用法整理

ListView+Adapter+Iterator 二、Iterator 安卓迭代器Iterator对collection进行迭代,在处理显示数据时,可用于遍历数据,配合Adapter使用效果更佳~ Iterator主要有三个基本操作(摘自JAVA中文API): hasNe

寺咚的博客 864

Android开发学习笔记整理(9)-Adapter、ListView和GridView

Adapter 什么是Adapter? ① 用于将数据与视图连接起来的“翻译官” ② 具体表现如图所示: 常见的Adapter BaseAdapter:适配器公共父类 ArrayAdapter:只能够展示文本的适配器 SimpleAdapter:可以展示复杂数据的适配器 自定义Adapter:根据自己的需求自定义适配器 自定义Adapter 继承BaseAdapter 重写BaseAdapter中的抽象方法 完成视图与数据的映射 创建视图 创建数据 使用Adapter ListView

qq_44458489的博客 499

Android学习 layout\Widget View\Adapter整理

参考api:http://api.apkbus.com/reference/android/graphics/BitmapFactory.html 整理一下layout、widget view、adapter 这三种最上层的几个父类为: java.lang.Object    ↳ android.view.View      ↳

Danny Chen的专栏 757

Android 快速开发--万能的Adapter

我们的CommonAdapter依然是一个抽象类,除了getView以外我们把其他的代码都实现了,这样的话,在使用我们的Adapter只要实现一个getView,然后getView里面再使用我们打造的通过的ViewHolder是不是感觉还不错~继续分析,Adapter一般需要保持一个List对象,存储一个Bean的集合,不同的ListView,Bean肯定是不同的,这个CommonAdapter肯定需要支持泛型,内部维持一个List,就解决我们的问题了;但是如果你仅仅是看一遍,而不去学习和深究。

2401_84122760的博客 947

RecyclerView全套方案系列二(4),android程序设计基础

开发是面向对象。我们找工作应该更多是面向面试。哪怕进大厂真的只是去宁螺丝,但你要进去得先学会面试的时候造飞机不是么?作者13年java转Android开发,在小厂待过,也去过华为,OPPO等,去年四月份进了阿里一直到现在。等大厂待过也面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含。

2301_76327109的博客 1015

android ListView布局之三(使用自定义的Adapter绑定数据,通过contextView.setTag绑定数据)有按钮的ListView

http://blog.csdn.net/chenzheng_java/article/details/6202586 最终结果图:     代码结构示意图         vlist2.xml代码:   [xhtml] view plaincopy xml version=

wantianpei的专栏 1065

Android超简单时间轴的实现

这里先说一下,我就试了一下CSDN的富文本编辑器,结果我退出去以后保存了草稿,发到自己的博客去了,而且我没有删除选项…无视吧,唉! 时间轴 时间轴,顾名思义就是将发生的事件按照时间顺序罗列起来,给用户带来一种更加直观的体验。京东和淘宝的物流顺序就是一个时间轴(如图),想必大家都不陌生。 上一篇博文写过,刚好最近的项目又要用到,于是想直接拿个过来用,发现都是置顶的,文本和点也没对齐。不太美观。于是又重新整了一个。实现原理都是一样的,利用ListView和Adapter来实现。我封装了Adapter模板,有兴

qq_40948137的博客 2081

Android记录15--关于ListView中adapter调用notifyDataSetChanged无效的原因

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!

2401_84903607的博客 901

1.2 android中树结构列表(使用recyclerView实现)自定义+文件路径

【代码】20241121 android中树结构列表(使用recyclerView实现)

qq_51108920的博客 686

Android-Tips

android知识点汇聚

Widsom的博客 4301

Android ListView中Item点击事件失效解决方案

2、被点击的控件如ImageButton中添加属性android:focusable=“false”优化的listView代码写法super();@Override// TODO 自动生成的方法存根@Override// TODO 自动生成的方法存根@Override// TODO 自动生成的方法存根@Override} else {// 用bean 来填充数据@Override// TODO 自动生成的方法存根。

2401_84103844的博客 1370

Android--自定义Listview

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/53895168 DEMO下载:http://download.csdn.net/detai...

weixin_33895657的博客 92
上一篇: 韦东山Linux视频第1期 ARM裸板驱动 学习笔记索引
下一篇: 《老罗Android》学习 Menu菜单
ymangu
博客等级 码龄16年 202粉丝 249原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值