Android移动开发—Listview列表视图的使用讲解及SimpleAdapter实例(1)

  • BaseAdapter

  • ArrayAdapter

  • SimpleAdapter

  • 实例具体实现

    • <1>在一个xml中定义组件Listview
  • <2>在新一个xml中定义想要试图组件结构

  • <3>放入所需图片资源(若视图组件无另外的资源此步省略)

  • <4>在主应用类中编写listview

  • 运行结果:

Listview定义


Listview在Android developers开发手册中的定义为:

Displays a vertically-scrollable collection of views, where each view is positioned immediatelybelow the previous view in the list.A list view is an adapter view that does not know the details, such as typeand contents, of the views it contains. Instead list view requestsviews on demand from a ListAdapter as needed, such as to display newviews as the user scrolls up or down.

翻译成中文则为:

显示垂直可滚动的视图集合,其中每个视图都位于列表中上一个视图的紧下方。列表视图是一个适配器视图,它不知道其包含的视图的详细信息,例如类型和内容。相反,列表视图根据需要从中请求视图ListAdapter,例如在用户向上或向下滚动时显示新视图。

通俗理解为当需要开发在一个视图页面中展示多个结构相同的组件时,可以使用listview列表视图要解决问题。

ListAdapter


ListAdapter可以作为AbsListView的数据源,AbsListView的子类有ListView、GridView和ExpandableListView。

ListAdapter相比Adapter新增了areAllItemsEnabled和isEnabled两个方法。

SpinnerAdapter


SpinnerAdapter可以作为AbsSpinner的数据源,AbsSpinner的子类有Gallery,

Spinner和AppCompatSpinner。

相比Adapter,SpinnerAdapter中新增了getDropDownView方法,该方法与Adapter接口中定义的getView方法类似,该方法主要是供AbsSpinner调用,用于生成Spinner下拉弹出区域的UI。在SpinnerAdapter的子类BaseAdapter中,getDropDownView方法默认直接调用了getView方法。

ArrayAdapter和SimpleAdapter都重写了getDropDownView方法,这两个类中的getDropDownView方法与其getView的方法都调用了createViewFromResource方法,所以这两个类中方法getView与方法getDropDownView代码基本一致。

CursorAdapter也重写了getView与getDropDownView方法,虽然这两个方法没有使用公共代码,但是这两个方法代码逻辑一致。

综上,我们可知当我们在覆写getDropDownView方法时,应该尽量使其与getView的代码逻辑一致。

BaseAdapter


BaseAdapter主要实现了以下功能:

  • BaseAdapter实现了观察者模式,Adapter接口定义了方法registerDataSetObserver和unregisterDataSetObserver,BaseAdapter中维护了一个DataSetObservable类型的变量mDataSetObservable,并实现了方法registerDataSetObserver和unregisterDataSetObserver。

  • BaseAdapter重写了getDropDownView方法,其调用了getView方法,如下所示:

public View getDropDownView(int position, View convertView, ViewGroup parent) {

return getView(position, convertView, parent);

}

  • 覆写其他一些方法,设置了默认值,比如覆写hasStableIds方法,使其默认返回false

ArrayAdapter


  • ArrayAdapter的构造函数既可以接收List作为数据源,又可以接收一个数组作为数据源,如果传入的是一个数组,那么在构造函数中也会通过Arrays.asList()将数组转换成list,最终用mObjects存储该list。

SimpleAdapter


构造方法:

在这里插入图片描述

参数解析:

在官方手册中:

在这里插入图片描述

讲解:

context是要运行simpleadapter关联的view正在运行的上下文

data为类型为map的list类型的数据

resource为listview组件所在的layout页面的id

from为map中的key组成的数组

to为每一个列表视图所有组件的id组成的数组

公共方法

public int getCount (): //表示的数据集中有多少个项目。

public View getDropDownView (int position,

View convertView,

ViewGroup parent)://获取一个View,它在下拉弹出窗口中显示数据集中指定位置的数据。

public Resources.Theme getDropDownViewTheme ()://返回先前通过调用设置的值

public Filter getFilter ()://返回一个过滤器,该过滤器可用于使用过滤模式约束数据。

public Object getItem (int position)://获取与数据集中指定位置关联的数据项。

public long getItemId (int position)://获取与列表中指定位置关联的行ID。

public View getView (int position,

View convertView,

ViewGroup parent)://获取一个在数据集中指定位置显示数据的视图。

public SimpleAdapter.ViewBinder getViewBinder ()://返回ViewBinder用于将数据绑定到视图的。

public void setDropDownViewResource (int resource)://设置布局资源以创建下拉视图。

public void setDropDownViewTheme (Resources.Theme theme)://设置Resources.Theme针对其放大下拉视图。

public void setViewBinder (SimpleAdapter.ViewBinder viewBinder)://设置用于将数据绑定到视图的绑定器。

public void setViewImage (ImageView v,

int value)://由bindView()调用以设置ImageView的图像,但前提是不存在现有的ViewBinder或现有的ViewBinder无法处理与ImageView的绑定。

public void setViewText (TextView v,

String text)://由bindView()调用以设置TextView的文本,但前提是不存在现有的ViewBinder或现有的ViewBinder无法处理与TextView的绑定。

实例例如:

在这里插入图片描述

此视图是由一个个水平分布的一个testview组件和一个imageview组成的视图组件,每个视图组件的结构一摸一样,不过具体内容却不一致,此时就可用listview轻松完成。

实例具体实现


<1>在一个xml中定义组件Listview

main.xml

说明:定义一个listivew组件

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”

android:layout_width=“match_parent”

android:layout_height=“match_parent”>

<ListView

android:id=“@+id/mylist”

android:layout_width=“match_parent”

android:layout_height=“wrap_content” />

<2>在新一个xml中定义想要试图组件结构

layout.xml

说明:组件结构组件实现为相对布局,左边为一个文本框testview,右边为一个图片imageview

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android=“http://schemas.android.com/apk/res/android”

android:layout_width=“match_parent”

android:layout_height=“match_parent”>

<TextView

android:id=“@+id/text”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:textSize=“20dp”

android:paddingLeft=“20dp”>

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

总之啊,家里没矿的同学们,如果你们想以后的日子过得好一些,多想想你们的业余时间怎么安排吧;

技术方面的提升肯定是重中之重,但是技术外的一些“软实力”也不能完全忽视,很多时候升职确实是因为你的技术足够强,但也与你的“软实力”密切相关

在这我也分享一份大佬自己收录整理的 Android学习PDF+架构视频+面试文档+源码笔记 ,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这些都是我闲暇还会反复翻阅并给下属员工学习的精品资料。在脑图中,每个知识点专题都配有相对应的实战项目,可以有效的帮助大家掌握知识点。

总之也是在这里帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习

相信自己,没有做不到的,只有想不到的

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

工学习的精品资料。在脑图中,每个知识点专题都配有相对应的实战项目,可以有效的帮助大家掌握知识点。

总之也是在这里帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习

[外链图片转存中…(img-3SrXkrVj-1713271841273)]

[外链图片转存中…(img-rJR9VN6D-1713271841274)]

相信自己,没有做不到的,只有想不到的

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 27
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值