Android教程2020 - RecyclerView使用入门

本文介绍RecyclerView的使用入门。这里给出一种比较常见的使用方式。

Android教程2020 - 系列总览

本文链接

想必读者朋友对列表的表现形式已经不再陌生。手机上有联系人列表,文件列表,短信列表等等。
本文讲述的是在Android开发中用RecyclerView来实现列表效果。

使用步骤

引入RecyclerView

在app的build.gradle文件中添加引用。我们使用的是androidx包。

dependencies {
    // ...
    implementation 'androidx.recyclerview:recyclerview:1.1.0'
}

数据准备

先确定一下要显示什么样的数据。是用户信息,联系人,或是文件。这里以字符为例。
写代码前,我们先考虑一下需求,就是要如何显示,怎么显示数据。日常工作中,一般会有UI效果图。本文中的美术设计就由我们自己发挥了。

比如显示 a 97

ViewHolder与layout

现在要显示的数据已经确定了。来设计UI表现。layout与ViewHolder紧密相关。在设计Adapter类前,先写ViewHolder类会比较好。

新建定义item(列表子项)的布局文件item_letter.xml

<?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"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000000" />

    <TextView
        android:id="@+id/tv2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000000" />

</LinearLayout>

这里使用内部类,把ViewHolder类写在activity类里面。

    private class VH extends RecyclerView.ViewHolder {
        TextView tv1;
        TextView tv2;

        public VH(@NonNull View itemView) {
            super(itemView);
            tv1 = itemView.findViewById(R.id.tv1);
            tv2 = itemView.findViewById(R.id.tv2);
        }
    }

从上面可以看出,ViewHolder和item的layout是紧密相关的。
layout里面的id写的比较简单。实际项目中可以给一些更有意义的id命名。

在activity的layout中,添加RecyclerView。

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/re_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

设计Adapter

设计一个适配器继承自RecyclerView.Adapter<VH>。这里的VH是我们上面写好的ViewHolder。
LetterAdapter中持有它自己的数据列表。需要实现3个方法。

onCreateViewHolder方法,要求返回VH对象。这里就是创建VH对象并返回。
而VH构造器要求传入一个View,我们利用LayoutInflater创建一个view给它。当然,创建的根据就是前面设计好的item_letter

onBindViewHolder是把数据交给对应的VH来显示。

getItemCount方法要求返回数据的数量。

    private class LetterAdapter extends RecyclerView.Adapter<VH> {

        private List<Character> dataList;

        public LetterAdapter(List<Character> dataList) {
            this.dataList = dataList;
        }

        @NonNull
        @Override
        public VH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            return new VH(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_letter, parent, false));
        }

        @Override
        public void onBindViewHolder(@NonNull VH holder, int position) {
            Character c = dataList.get(position);
            holder.tv1.setText(c.toString());
            holder.tv2.setText(String.valueOf(Integer.valueOf(c)));
        }

        @Override
        public int getItemCount() {
            return dataList.size();
        }
    }

粗心大意的时候,可能会忘记初始化adapter里的dataList。报一个null pointer异常。

设置RecyclerView

在Activity的onCreate方法里进行了初始化。
RecyclerView需要2项设置,适配器与LayoutManager。适配器就是我们上面定的那个。
LayoutManager这里用LinearLayoutManager,指定为垂直方向,这样我们会得到一个上下滑动的列表。

        List<Character> characterList = new ArrayList<>();
        for (char c = 'a'; c <= 'z'; c++) {
            characterList.add(c);
        }

        mLetterAdapter = new LetterAdapter(characterList);
        RecyclerView letterReView = findViewById(R.id.re_view);
        letterReView.setAdapter(mLetterAdapter);
        letterReView.setLayoutManager(new LinearLayoutManager(this, RecyclerView.VERTICAL, false));

观察运行结果

运行到手机或者模拟器上,打开这个activity。有的朋友就发现,为啥屏幕里一个子项item就占满了整个屏幕?
因为我们前面设置的item占满屏幕。回到item_letter.xml,看一下根layout的设置。
layout_height="match_parent"里的设置改为wrap_content
重新编译运行一下再看看结果。

也可以给根layout设置固定的高度。具体视美术设计和需求而定。

小结

到这里我们掌握了RecyclerView的基本使用方式。
接下来还要了解如何自定义它的表现形式。例如点击或长按item的反应;item之间添加分割线;增/删/改数据;使用瀑布流样式等等。
RecyclerView使用了适配器模式

可以参考官方的RecyclerView文档

工程放这里: https://github.com/AnRFDev/Tutorial2020

相关阅读
RecyclerView - 使用入门
RecyclerView点击事件 - 如何设置点击事件
RecyclerView示例 - 实际使用
RecyclerView获取滑动距离
RecyclerView显示多种item

原文地址:https://www.cnblogs.com/rustfisher/p/12254732.html

时间: 2024-08-08 06:26:00

Android教程2020 - RecyclerView使用入门的相关文章

Android教程2020 - RecyclerView响应点击

本文介绍RecyclerView设置点击的方法.这里给出比较常见的使用方式. Android教程2020 - 系列总览 本文链接 前面我们已经知道如何用RecyclerView显示一列数据. 用户点击某个item时,app可以做出相应的反应.这里我们使用添加点击监听器的方式来实现这个效果. Android开发中,监听器模式使用十分广泛.最先被开发者认识到的应该是Button的点击事件监听. 设计并添加监听器 首先设计监听器.OnItemClickListener1接口.实际开发中,接口的名字可以

Android教程2020 - RecyclerView显示多种item

Android教程2020 - 系列总览 本文链接 前面我们已经用RecyclerView显示一些数据.也知道如何获取滑动的距离. 前面我们的列表中显示的都是同类数据.如果要在一个列表中显示不同类别的数据,该怎么做呢? RecyclerView已经有应对这类场景的能力,本文描述如何用RecyclerView显示多种内容(item). 综述 这个例子中涉及到的类和文件比较多. 放在同一个包里的文件 BaseMultiData.java BaseVH.java ItemTypeDef.java Mu

Android教程2020 - RecyclerView获取滑动距离

获取RecyclerView滑动的距离. Android教程2020 - 系列总览 本文链接 前面我们已经用RecyclerView显示一些数据. 本文演示如何获取RecyclerView的滑动距离. 要实现这个功能,需要给RecyclerView添加滑动时监听RecyclerView.OnScrollListener. recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public

Android轻量级ORM框架ActiveAndroid入门教程(转)

注:没有找到出处,如有侵犯,请告知 开始ActiveAndroid神奇之旅: 在AndroidManifest.xml中我们需要添加这两个 AA_DB_NAME (数据库名称,这个name不能改,但是是可选的,如果不写的话 是默认的"Application.db"这个值) AA_DB_VERSION (数据库版本号,同样是可选的 – 默认为1) <manifest ...> <application android:name="com.activeandro

Android自学历程—RecyclerView的使用

在网上看见有关RecyclerView的介绍,说是ListView的进阶版,官方推荐,便找来资料,耍耍. 首先挂上官方的教程,官方是最具权威和最让人信服的第一手资料. https://developer.android.com/training/material/lists-cards.html To create complex lists and cards with material design styles in your apps, you can use the RecyclerV

android教程:Android创建新项目及开发

android教程:Android创建新项目及开发,这篇文章是比较简单的知识,比较适合才入门的同学们看,当然,大家也可以来看看我总结的,给小编一点意见,说说你们的看法! 创建一个新项目是很简单的,只要你安装了Eclipse插件,并且你的Eclipse软件版本在3.2或3.3,你就可以开始开发了. 首先, 看一下要创建Hello, World程序从高级层面上有哪些步骤: 1.通过 File -> New -> Project 菜单,建立新项目Android Project 2.填写新项目各种参数

AutoCAD2014室内设计 AutoCAD2009施工图教程 CAD布局及规范作图教程 室内手绘入门教程

热门推荐电脑办公计算机基础知识教程 Excel2010基础教程 Word2010基础教程 PPT2010基础教程 五笔打字视频教程 Excel函数应用教程 Excel VBA基础教程 WPS2013表格教程 更多>平面设计PhotoshopCS5教程 CorelDRAW X5视频教程 Photoshop商业修图教程 Illustrator CS6视频教程 更多>室内设计3Dsmax2012教程 效果图实例提高教程 室内设计实战教程 欧式效果图制作实例教程 AutoCAD2014室内设计 Aut

Eclipse中使用recyclerview时出现Caused by: java.lang.NoClassDefFoundError: android.support.v7.recyclerview.R$styleable

转自: http://blog.csdn.net/chenleicpp/article/details/46848785 程序崩溃,错误提示: Caused by: java.lang.NoClassDefFoundError: android.support.v7.recyclerview.R$styleable 原因: 在eclipse中使用RecyclerView,编译没有问题,但是运行时候会出现如下错误,百思不得其解,又说v4包与v7包版本不一致,有说没有导入v7-compat包的,经反

程序设计C语言二级考试教程 Java基础视频教程 安卓软件开发教程 Unity3D游戏制作入门教程

热门推荐电脑办公计算机基础知识教程 Excel2010基础教程 Word2010基础教程 PPT2010基础教程 五笔打字视频教程 Excel函数应用教程 Excel VBA基础教程 WPS2013表格教程 更多>平面设计PhotoshopCS5教程 CorelDRAW X5视频教程 Photoshop商业修图教程 Illustrator CS6视频教程 更多>室内设计3Dsmax2012教程 效果图实例提高教程 室内设计实战教程 欧式效果图制作实例教程 AutoCAD2014室内设计 Aut