Android零基础入门第42节:自定义BaseAdapter

作者: 今生心理金馀 | 来源:发表于2017-08-22 10:33 被阅读213次

    在ListView的使用中,有时候还需要在里面加入按钮等控件,实现单独的操作。也就是说,这个ListView不再只是展示数据,也不仅仅是这一行要来处理用户的操作,而是里面的控件要获得用户的焦点。读者可以试试用SimpleAdapter添加一个按钮到ListView的条目中,会发现可以添加,但是却无法获得焦点,点击操作被ListView的Item所覆盖。这时候最方便的方法就是使用灵活的适配器BaseAdapter了。

    一、使用BaseAdapter

    BaseAdapter是Android应用程序中经常用到的基础数据适配器的基类,它实现了Adapter接口。其主要用途是将一组数据传到像ListView、Spinner、Gallery及GridView等UI显示组件进行显示。

    由于BaseAdapter是一个抽象类,所以使用BaseAdapter时必须有一个类继承它,并实现它的方法。BaseAdapter的灵活性就在其要重写的很多方法,常会重写的几个方法如下。

    int getCount():主要是获得列表项的数量。

    Object getItem(int position):主要是获得当前列表项。

    long getItemId(int position):主要是获得当前列表项的ID。

    View getView(int position, View convertView, ViewGroup parent):主要是获得第position处的列表项组件。

    二、示例

    接下来通过一个示例程序来学习如何自定义BaseAdapter创建ListView。

    继续使用WidgetSample工程,在app/main/res/layout/目录下创建custom_baseadapter_layout.xml文件,在其中填充如下代码片段:

    在res/layout/目录下新建一个custom_baseadapter_item.xml的列表项布局文件,其代码如下:

    考虑到每个列表项都可以是一个非常复杂的实体对象,用一个实体类更方便数据管理。创建一个类,代码如下:

    创建一个MyBaseAdapter类,继承BaseAdapter类,重写其4个主要方法,具体代码如下:

    上面程序中最重要的就是getView()方法,其返回列表项组件。

    接下来为ListView提供Adapter,使用自定义的BaseAdapter决定ListView所要显示的列表项。新建CustomBaseAdapterActivity.java文件,加载上面新建的布局文件,具体代码如下:

    可以发现使用自定义BaseAdapter创建ListView,界面交互代码非常简洁,却可以实现非常复杂的界面。

    运行程序,可以看到下图所示界面效果。

    至此,关于ListView中常用的几个Adapter基本学习完毕,如果还没有掌握建议回头再多练习。从下一期开始来优化我们的ListView,提供我们的Android程序运行效率。


    今天就先到这里,如果有问题欢迎留言一起探讨,也欢迎加入Android零基础入门技术讨论微信群,共同成长!

    此文章版权为微信公众号分享达人秀(ShareExpert)——鑫鱻所有,若需转载请联系作者授权,特此声明!

    往期总结分享:

    Android零基础入门第1节:Android的前世今生

    Android零基础入门第2节:Android 系统架构和应用组件那些事

    Android零基础入门第3节:带你一起来聊一聊Android开发环境

    Android零基础入门第4节:正确安装和配置JDK, 高富帅养成第一招

    Android零基础入门第5节:善用ADT Bundle, 轻松邂逅女神

    Android零基础入门第6节:配置优化SDK Manager, 正式约会女神

    Android零基础入门第7节:搞定Android模拟器,开启甜蜜之旅

    Android零基础入门第8节:HelloWorld,我的第一趟旅程出发点

    Android零基础入门第9节:Android应用实战,不懂代码也可以开发

    Android零基础入门第10节:开发IDE大升级,终于迎来了Android Studio

    Android零基础入门第11节:简单几步带你飞,运行Android Studio工程

    Android零基础入门第12节:熟悉Android Studio界面,开始装逼卖萌

    Android零基础入门第13节:Android Studio配置优化,打造开发利器

    Android零基础入门第14节:使用高速Genymotion,跨入火箭时代

    Android零基础入门第15节:掌握Android Studio项目结构,扬帆起航

    Android零基础入门第16节:Android用户界面开发概述

    Android零基础入门第17节:TextView属性和方法大全

    Android零基础入门第18节:EditText的属性和使用方法

    Android零基础入门第19节:Button使用详解

    Android零基础入门第20节:CheckBox和RadioButton使用大全

    Android零基础入门第21节:ToggleButton和Switch使用大全

    Android零基础入门第22节:ImageView的属性和方法大全

    Android零基础入门第23节:ImageButton和ZoomButton使用大全

    Android零基础入门第24节:自定义View简单使用,打造属于你的控件

    Android零基础入门第25节:简单且最常用的LinearLayout线性布局

    Android零基础入门第26节:两种对齐方式,layout_gravity和gravity大不同

    Android零基础入门第27节:正确使用padding和margin

    Android零基础入门第28节:轻松掌握RelativeLayout相对布局

    Android零基础入门第29节:善用TableLayout表格布局

    Android零基础入门第30节:两分钟掌握FrameLayout帧布局

    Android零基础入门第31节:少用的AbsoluteLayout绝对布局

    Android零基础入门第32节:新推出的GridLayout网格布局

    Android零基础入门第33节:Android事件处理概述

    Android零基础入门第34节:Android中基于监听的事件处理

    Android零基础入门第35节:Android中基于回调的事件处理

    Android零基础入门第36节:Android系统事件的处理

    Android零基础入门第37节:初识ListView

    Android零基础入门第38节:初识Adapter

    Android零基础入门第39节:ListActivity和自定义列表项

    Android零基础入门第40节:自定义ArrayAdapter

    Android零基础入门第41节:使用SimpleAdapter

    相关文章

      网友评论

      • fa0a896402cb:楼主你好,getItemId(),查了下API作用是“Get the row id associated with the specified position in the list.”,这个“row id”也好,你说的“列表项id”也好,这个id是用来做什么的啊?
        要说getView()方法由调用getItem(),这个我理解,但是么看到有用到getItemId()啊?
        今生心理金馀:@zenki2005 前半段理解没问题的,后半段不是很准确。geitItem是得到对应item填充的数据对象,getItemId是得到对应item在列表中的位置,比如0、1、2、3这样的,和你说的这个id是有区别的。
        fa0a896402cb:@鑫鱻 谢谢回复!因为刚开始学Android,很多还是不懂。知道了position通过getItem()就能得到列表项这个Object,这个Object是一个包含各种用于填充列表项数据的对象是吧?getItemId()得到特定的id以后,可以用过R.id.getItemId()就能访问到这个特定的列表项item的布局,还可以通过findeViewbyId(id)在Activity里实例化这列表项item……我这么理解对么?:smile:
        今生心理金馀:如果你要在Activity里面操作对应position这个item布局里面的东西,是不是就要通过这个来得到呢?

      本文标题:Android零基础入门第42节:自定义BaseAdapter

      本文链接:https://www.haomeiwen.com/subject/oiikdxtx.html