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

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”>

<ImageView

android:id=“@+id/image”

android:layout_width=“30dp”

android:layout_height=“30dp”

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

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

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

img

img

img

img

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

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

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

最后

都说三年是程序员的一个坎,能否晋升或者提高自己的核心竞争力,这几年就十分关键。

技术发展的这么快,从哪些方面开始学习,才能达到高级工程师水平,最后进阶到Android架构师/技术专家?我总结了这 5大块;

我搜集整理过这几年阿里,以及腾讯,字节跳动,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

2021年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。祝大家2021年万事大吉。

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

…(img-rjnuvJGA-1712235060690)]

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

2021年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。祝大家2021年万事大吉。

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值