Android开发学习笔记——ListView、GridView和RecycleView


在Android开发的过程中,由于手机屏幕大小是有限的,其能够显示的内容也是有限的,因此我们往往需要使用可滚动的控件来批量展示数据集合,在Android开发中,我们就常用List View、GridView和RecycleView来展示。

ListView

ListView是我们在开发过程中最常用的一个控件之一,顾名思义,ListView是一个列表组件,可以用于批量展示一个数据集合,并以列表的形式显示出来。
ListView的常用属性:

属性 含义
android:choiceMode 设置ListView的选择行为
android:divider 设置ListView的分割线
android:dividerHeight 设置分割线的高度
android:entries 指定一个数组资源
android:footerDividersEnabled 是否在footerview之前绘制分割线
android:headerDividersEnabled 是否在headererview之前绘制分割线

ListView基本用法

简单用法

任何ListView的实现都可以将其概括成四个部分:

  • 在布局中添加ListView:用于显示列表
  • 创建ListView中item的布局:用于显示列表表项
  • 创建ListView的Adapter:ListView是通过Adapter为其提供数据的,Android提供了多个Adapter实现类,如ArrayAdapter、SimpleAdapter等
  • 获取列表数据:ListView的展示内容,一般会根据显示内容创建对应的实体类,根据应用场景从服务端获取或是从数据库等渠道获取

ListView最简单的用法如下:
首先在布局中添加ListView组件,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".list.ListViewActivity">
    <ListView
        android:id="@+id/lvSimple"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

在Activity中为ListView提供adapter,item布局和列表数据,并为子项添加点击事件:

class ListViewActivity : AppCompatActivity() {
   

    override fun onCreate(savedInstanceState: Bundle?) {
   
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_list_view)

        //提供列表数据
        val arr = arrayOfNulls<String>(20)
        for (i in 1..20) arr[i-1] = "item$i"
        //创建adapter,使用Android提供的R.layout.simple_list_item_1作为item的布局
        val arrayAdapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arr)
        lvSimple.adapter = arrayAdapter
        //设置item的点击事件
        lvSimple.setOnItemClickListener{
    adapterView : AdapterView<*>, view1: View, i: Int, l: Long ->
            Toast.makeText(this, "item${
     i+1}", Toast.LENGTH_SHORT).show()
        }
    }
}

在这里,ListView的数据源为一个简单的String数组,使用了Android提供的ArrayAdapter作为ListView的adapter,ArrayAdapter可用来绑定简单单一的数据,并使用Android提供的R.layout.simple_list_item_1作为子项的布局。通过setOnItemClickListener可以为列表子项提供点击事件。具体实现效果如下图:
ListView简单实现

自定义item和Adapter

通过Android提供的Adapter我们可以很简单地创建出一个简单的列表,但是一旦item中的元素复杂起来,需求多了起来,那么ArrayAdapter和SimpleAdapter等就无法轻易满足开发需求,此时,我们就需要去自定义item的实现了,主要包括以下几步:

  1. 自定义item布局
  2. 根据item所需数据创建自定义实体数据类
  3. 自定义Adapter
  4. 为ListView设置自定义的adapter

其中,最重要的就是继承BaseAdapter去自定义Adapter。
BaseAdapter是包括ArrayAdapter和SimpleAdapter等Adapter的基类,是一个抽象类,自定义Adapter需要继承BaseAdapter并实现其抽象方法,具体如下:

方法名 含义
getView 创建item
getCount 获取列表长度
getItem 获取item数据对象
getItemId 根据索引获取item的id,通常直接返回索引号

其中最重要的就是实现getView方法,通过该方法就能够创建item的View将数据展示出来。
首先,创建item的自定义布局,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <ImageView
        android:id="@+id/ivAvatar"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:src="@mipmap/ic_launcher"
        android:layout_margin="10dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"/>
    <TextView
        android:id="@+id/tvName"
        android:text="name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="20dp"
        app:layout_constraintStart_toEndOf="@id/ivAvatar"
        app:layout_constraintTop_toTopOf="@id/ivAvatar"
        android:layout_marginLeft="20dp" />
    <TextView
        android:id="@+id/tvAge"
        android:text="10"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="@id/tvName"
        app:layout_constraintBottom_toBottomOf="@id/ivAvatar"/>
    <Button
        android:id="@+id/btTest"
        android:text="button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="20dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf
最低0.47元/天 解锁文章
android recylerview 横向gridview,RecyclerView学习笔记(二)——实现GridView
weixin_36179777的博客
05-25 792
RecycleViewListView一样,都是做列表显示View子项的控件,它比ListView更高效和自由。解析RecycleView,Recycle View意思就是该控件只管回收和显示View子项,而对于如何显示,显示什么,它是不关心的,这给开发过程带来了极大的便利,比如ListView只能作为单列的列表显示,GridView将一个界面表格化,通常情况下GridView通过强制View子...
ListViewGridViewRecyclerView分析
cherry459的博客
03-01 329
ListViewGridViewRecyclerView分析ListViewGridViewRecyclerView ListView 列表数据显示需要4个元素,分别是: [1] 用来展示列表的控件ListView [2] 给列表装配数据的适配器adapter [3] 需要展示的数据集 [4] 数据集展示需要的item布局View ListView 复用模板 @Override ...
Android开发ListViewGridView 详解及示例代码
01-04
ListViewGridViewAndroid开发中的常用控件,它们和Adapter配合使用能够实现很多界面效果。下面分别以实例说明ListViewGridView的用法。        1.ListViewAndroid开发实例        ListViewandroid开发中最常用的控件之一,一般构成列表包括三个元素,ListView:用来展示列表的视图、Adapter:数据与视图连接的桥梁、Data:具体的数据包括字符串 、图片或者控件。        适配器一般有以下几种类型:        ArrayAdapter:Android中最简单的一种适配器,专门用于列表控件。
浅谈RecyclerView(完美替代ListView,GridView)
09-01
RecyclerView绝对是一款功能强大的控件,涵盖了ListView,GridView,瀑布流等数据表现的形式。本文对其进行系统介绍,有需要的朋友可以看下
使用RecyclerView实现多行水平分页的GridView效果和ViewPager效果
热门推荐
StoneHui
07-10 4万+
前些天看到有人在论坛上问这种效果怎么实现,没写过也没用过这个功能,网上查了一下,大多是使用ViewPager+GridView或者HorizontalScrollView+GridView实现,不过貌似有点复杂,太懒,没仔细看。这两天学习RecyclerView的使用(网上有很多文章,建议大家阅读本博客的时候先去了解一下),发现RecyclerView可以实现GridView 的横向滚动效果,不过没
RecyclerViewGridView实现
keven博客
03-09 7023
/** * Created by keven on 2018/3/9. */ public class RecyclerViewGridAdapter extends RecyclerView.Adapter&lt;RecyclerViewGridAdapter.GridViewHolder&gt; implements OnClickListener{ private Conte...
GridViewListView简单使用
weixin_30628801的博客
04-22 117
  现在在做一个小项目,用到了基础的GridViewListView。在此做一个记录。项目的主界面是用DrawerLayout实现侧滑,顶部栏使用ToolBar,SlidingTabLayout和ViewPager实现左右切换页卡,多个Fragment通过Adapter适配到ViewPager上。其中两个页卡就是用的GridViewListView。其他控件会另起新的随笔来写。   两个Ta...
Android移动应用开发学习笔记listview和适配器的使用)
01-20
文章目录1、用listview和BaseAdapter实现listView的入门1.1、布局文件1.2、MainActivity类2、listview的优化2.1、listview优化的原因:2.2、优化处理:3、listview显示复杂页面(在listview的一个item中显示图片和...
AndroidListViewGridView赋值错位
01-20
ListViewGridView多次调用getView的bug,导致赋值错位 最近总遇到写GridView适配器赋值时,最后一两个需定义其他图片时,赋图错误,原因就是适配器的getView多次调用,导致数据赋值错误,上网搜索终于找到解决...
Android开发经验总结——ListView的使用
03-26
NULL 博文链接:https://jeyechao.iteye.com/blog/1149127
AndroidListView实现GridView
07-31
ListView实现GridView,并支持单个cell的点击事件
RecyclerView GridView 矩形自适应
12-09
博客地址:http://blog.csdn.net/dengmengxin/article/details/50238495
androidListView嵌套GridView的使用
07-29
androidListView嵌套GridView的使用
androidListViewGridView拖拽移位具体实现及拓展
03-04
关于ListView拖拽移动位置,想必大家并不陌生,比较不错的软件都用到如此功能了.如:搜狐,网易,百度等,但是相比来说还是百度的用户体验较好,不偏心了,下面看几个示例: 首先说一下:拖拽ListView的item就不应该...
android listviewgridview,androidlistviewgridview万能适配器
weixin_34853926的博客
05-27 165
第一步:布局文件和上一节课布局文件一样,在这里就不再阐述第二步,新建com.example.zlianxi.utils,新建一个ViewHolder:​packagecom.example.zlianxi.utils;import android.content.Context;import android.graphics.Bitmap;import android.util.SparseArr...
Android05之ListViewGridView
autumn_leaf blog
04-09 534
上次我们介绍了CheckBox和ImageView两种控件,不熟悉用法的可以查看我的上一篇博客,链接为https://blog.csdn.net/chenpeixing361/article/details/89147660。这一次我们继续介绍新的控件——ListViewGridViewListView ListView从字面义可理解为列表视图,这里我们讲解以下内容:①常用属性;②Ada...
RecyclerView实现 gridview效果!
u011827502的博客
08-30 1万+
主界面代码 /** * @author * @Date 2016年8月29日 * @describe 主页面 */ public class InternetAccessLogFragment extends BaseFragment { private View v; private RecyclerView recyclerView; private Te
Android BaseAdapter
LiuJP的博客
04-06 161
RecyclerViewAndroid5.0的一个核心扩展包,毫不夸张的说该类是Android5.0中对编程人员最重要的一个扩展包。 简单讲下为什么用RecyclerView替换ListViewGridView 1.低耦合性 ListViewGridView只能实现单一的布局方式,RecyclerView可通过setLayoutManager实现ListView的垂直布局,GridView的...
android ListViewGridView使用
burn的博客
01-11 701
1,xml文件布局             android:id="@+id/listView"             android:divider="@null"             android:scrollbars="none"             android:layout_width="match_parent"             androi
Android开发(十三)——全屏滚动与listview
最新发布
05-25
Android应用开发过程中,有时候我们需要实现全屏滚动的效果,或者在滚动页面中嵌入ListView等组件。...以上就是Android开发中如何实现全屏滚动和在滚动页面中嵌入ListView的方法。希望对你有所帮助。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Java中swing编程中界面组件加载不出的问题 4732
  • flutter中嵌入webview无法出现弹窗 3425
  • Android开发笔记——MVVM模式&Jetpack实现MVVM模式 3405
  • 关于RecyclerView的点击事件的一个坑 2346
  • 自定义简单的ProgressBar 1815

分类专栏

  • Android开发学习笔记 28篇
  • outline
  • java 2篇
  • Android 30篇
  • 算法 1篇
  • Flutter 1篇

最新评论

  • Android开发学习笔记——ViewBinding

    锥度vs: 怎么看它生成的java代码

  • Android开发学习笔记——View动画和属性动画

    FengDai000: 写的很详细,排版也很用心,感谢大佬

大家在看

  • canary绕过感悟随记(pwn入门) 1
  • 【LLaVA系列】CLIP/LLaVA/LLaVA1.5/VILA 模型全面梳理! 1213
  • 如何学习提示词?
  • 如何使用ModalBarrier组件
  • 【Linux多线程】线程的终止、等待和分离

最新文章

  • Android开发学习笔记之设计模式——组合模式&享元模式&外观模式
  • Android开发学习笔记之RecycleView缓存机制
  • Android开发学习笔记之设计模式——装饰模式&桥接模式
2021年6篇
2020年22篇
2019年10篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

PHP网站源码通辽SEO按效果付费推荐温州网站推广方案公司茂名外贸网站设计多少钱菏泽外贸网站建设推荐南京企业网站改版盘锦网站改版公司张家口网站推广上饶如何制作网站公司广元网站设计推荐阿里网站seo优化价格六安seo网站推广价格长治网站优化按天扣费报价淮北阿里店铺运营报价衢州百搜标王公司榆林网站推广工具盐田网站制作设计酒泉百度爱采购公司横岗网站定制公司淮安企业网站设计宁波百姓网标王推广价格池州百度网站优化多少钱丽水网站搭建哪家好山南SEO按天收费哪家好汕尾企业网站建设哪家好天水SEO按天计费多少钱济宁企业网站改版价格玉溪百姓网标王推广哪家好淮安网络营销多少钱嘉兴百度竞价包年推广公司海南seo排名报价歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化