Android listView用法详解

Android listView用法详解1.前言在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。列表的显示需要三个元素:1.ListVeiw:用来展示列表的View。2.适配器:用来把数据映射到ListView上的中介。3.数据:被映射的字符串,图片,或者基本组件。2.listView的使用listVi

大家好,又见面了,我是你们的朋友全栈君。

1. 前言


在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。

列表的显示需要三个元素:

1.ListVeiw:用来展示列表的View。

2.适配器:用来把数据映射到ListView上的中介。

3.数据:被映射的字符串,图片,或者基本组件。

2.listView的使用


listView的布局上比较简单,只需要在其布局文件中写上如下代码即可:
<span style="font-size:14px;"><ListView
        android:id="@+id/listView"
        style="@style/listviewStyle"
        android:longClickable="true"
        android:clickable="true"></ListView></span>

这样就创建了一个空的列表,然后在.java文件中再填充数据,所以id是一定要设的。其中我提前设置了长按和单击属性为true,防止后续长按时事件和单击事件冲突。

    在.java文件中获得这个ListView之后,使用Adapter为这个ListView填充数据,常用的Adapter有ArrayAdapter、SimpleAdapter
。随着ListView
中内容的丰富,以上两种Adapter已经很难满足需要,因此现在一般使用自定义的Adapter来填充数据。暂且先介绍ArrayAdapter和SimpleAdapter,后面有时间再来写自定义Adapter。

ArrayAdapter

最简单的Adapter,创建ArrayAdapter时需指定如下三个参数:
Context:这个参数无须多说,它代表了访问整个Android应用的接口。几乎创建所有组件都需要传入Context对象。
textViewResourceId:一个资源ID,该资源ID代表一个TextView,该TextView组件将作为ArrayAdapter的列表项组件。
数组或List:该数组或List将负责为多个列表项提供数据。

示例:
Android listView用法详解
在创建完ArrayAdapter之后,调用ListView的setAdapter方法即可将数据填充到ListView中。
这里有一点要特别注意的是textViewResourceId是一个layout,在这个layout中只能有一个TextView,其它任何组件都不能有,包括LinearLayout等布局组件,
否则会报错。

SimpleAdapter

由于ArrayAdapter只能显示文字,功能实在有限,如果需要多填充一些内容的话指望不上,这时候可以使用SimpleAdapter。
SimpleAdapter相比ArrayAdapter强大很多,创建SimpleAdapter需要5个参数,第一个参数依然是Context,就不多说了,下面介绍余下的4个参数:
第2个参数:该参数应该是一个List<? Extends Map<String, ?>>类型的集合对象,该集合中每个Map<String, ?>对象生成一个列表项。
第3个参数:该参数指定一个界面布局的ID。该界面布局指定每一个列表项的样式。
第4个参数:该参数应该是一个String[]类型的参数,该参数决定提取Map<String, ?>对象中哪些key对应的value来生成列表项。
第5个参数:该参数应该是一个int[]类型的参数,该参数决定填充哪些组件。

示例:
<span style="font-size:14px;">        final List<Map<String, Object>> data = new ArrayList<>();        final int[] image = new int[] {R.mipmap.apple, R.mipmap.banana, R.mipmap.cherry,                                  R.mipmap.coco, R.mipmap.kiwi, R.mipmap.orange, R.mipmap.pear,                                  R.mipmap.strawberry, R.mipmap.watermelon};        String[] name = new String[] {"Apple", "Banana", "Cherry", "Coco", "Kiwi",                                      "Orange", "Pear", "Strawberry", "Watermelon"};        for (int i = 0; i < 9; i++) {            Map<String, Object> temp = new LinkedHashMap<>();            temp.put("image", image[i]);            temp.put("name", name[i]);            data.add(temp);        }        final ListView listView = (ListView) findViewById(R.id.listView);        final SimpleAdapter simpleAdapter = new SimpleAdapter(this, data, R.layout.item,                new String[] {"image", "name"}, new int[] {R.id.image, R.id.name});        listView.setAdapter(simpleAdapter);</span>

R.layout.item文件的主要布局如下:

<span style="font-size:14px;">        <ImageView
            android:id="@+id/image"
            style="@style/image"
            // android:src="@mipmap/apple"
            android:layout_marginLeft="@dimen/margins"
            android:scaleType="centerInside"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_centerVertical="true"/>

        <TextView
            android:id="@+id/name"
            style="@style/textView"
            android:layout_marginLeft="@dimen/margins"
            android:gravity="center_vertical|left"
            // android:text="Apple"
            android:textColor="#D5000000"/></span>

可以看到,每个item中有一个图片image和文字name,这个layout用于规定ListView中每一个列表项的样式。SimpleAdapter中的第四个参数String数组与map的两个key对应,第五个参数int数组与这个layout中两个控件的id相对应,注意String[]数组与int[]数组中的值要一一对应,在这个示例中,key为name的value填充到id为name的TextView中。效果如下图所示:

Android listView用法详解


3. ListView列表项的单击和长按


方法原型如下:


Android listView用法详解

     注意,长按事件有返回值。并且在两个方法的参数中都有int i, long l这两个参数,i指的是这一项在列表中的位置,l指的是这一项的id,在ArrayAdapter和SimpleAdapter中,i和l是相等的,在另一种Adapter——CursorAdapter中,l指的是从数据库中取出的数据在数据库中的id值。


4. ListView数据更新

    

    直观地想,要实现数据更新,只要更新List,重新创建一个SimpleAdapter就可以了,这样会比较麻烦,SimpleAdapter有一个notifyDataSetChanged()方法,当之前创建该SimpleAdapter的List发生改变时,调用该方法就可以刷新列表了。要特别注意的一点是,List不能指向新的内存地址,即不能list = new ArrayList<>();这样是不起作用的,只能调用它的remove(),add()等方法来改变数据集。

Android listView用法详解



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163283.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mybatiscodehelperpro2.9.4-183-204在线激活码(JetBrains全家桶)2022.02.05

    (mybatiscodehelperpro2.9.4-183-204在线激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~76…

    2022年4月1日
    348
  • 如何下载spring源码?「建议收藏」

    如何下载spring源码?「建议收藏」如何下载spring源码?1、打开浏览器输入网址:spring.io回车,进入如下界面,点击project->springframework2、根据序号,目前最新的稳定版本为:5.3.8,点击序号4旁边的“小猫”图标进入下载页面3、进入如下界面,但不是我们需要的,往下划拉,4、划拉到这里为止,并点击如图所示链接5、来到如下界面,继续往下划拉6、划拉到这里,我们就找到了下载源码的链接:https://repo.spring.io其实我们完全可以直接在浏览器中输入该链

    2022年8月12日
    5
  • 苏州工业园区智慧党建星平台(福利院上班怎么样)

    背景需求:福利院属于民政社会保障的组成部分,是民政社会福利方向的业务之一,民政福利院等养老机构管理是面向公、私立的各种社会福利院、养老院、颐养院、养护院内部业务经办管理过程,服务的群体是困难老年人、孤老残障优抚对象、失独老年人、社会老年人。解决方案:民政养老服务信息管理解决方案主要帮助民政部门对养老行业实现信息化的管理。政府部门通过民政养老信息管理平台对养老基础数据采集、养老机构…

    2022年4月16日
    72
  • linux 解压tar包

    linux 解压tar包tar-xfsettlement.tarExamples:tar-cfarchive.tarfoobar#Createarchive.tarfromfilesfooandbar.tar-tvfarchive.tar#Listallfilesinarchive.tarverbosely.tar-xfar…

    2022年6月18日
    27
  • scrapy安装步骤_scrapy官网

    scrapy安装步骤_scrapy官网安装scrapy过程中出现各种包安装错误,所以自己一直看教程知道scrapy安装需要准备好各种环境。这些包按照从下到上的顺序下载,lxml这个包按下文教程安装。不想看过多文字和图片的懒人们可看教程视频:http://www.iqiyi.com/w_19rz36pjft.html利用pipinstall命令安装pywin32,pyopenssl.这两个包可在cmd安装成功pip…

    2022年9月18日
    3
  • Java键盘输入一个int数组[通俗易懂]

    Java键盘输入一个int数组[通俗易懂]在线编程,往往第一步思路好了,结果输入不熟练输入半天,也真是醉了!一下列出来两个样例输入和输出:【样例一】packagetest1;importjava.util.Arrays;importjava.util.Scanner;//所有的输入和输出练习publicclassMain{publicstaticvoidmain(String[]args){

    2022年6月26日
    114

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号