首页 > 其他分享 >Android入门教程 | RecyclerView使用入门

Android入门教程 | RecyclerView使用入门

时间:2023-10-20 10:03:01浏览次数:40  
标签:ViewHolder layout VH 入门教程 item Android RecyclerView


Android入门教程 | RecyclerView使用入门_面试

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

使用步骤

引入RecyclerView

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

gradle:

dependencies {
    // ...
    implementation 'androidx.recyclerview:recyclerview:1.1.0'
}
数据准备

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

比如显示 a97

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 类里面。

创建VH类

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

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`。

LetterAdapter:

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,指定为垂直方向,这样我们会得到一个上下滑动的列表。

使用 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));` </pre></details>
观察运行结果

运行到手机或者模拟器上,打开这个activity。有的朋友就发现,为啥屏幕里一个子项item就占满了整个屏幕?

因为我们前面设置的item占满屏幕。回到item_letter.xml,看一下根layout的设置。 把layout_height="match_parent"里的设置改为wrap_content。 重新编译运行一下再看看结果。

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

最后分享一份

【腾讯技术团队出品】Android零基础入门到精通,Android Studio安装教程+全套安卓基础教程

Android编程入门教程

Java语言基础从入门到熟悉

Android入门教程 | RecyclerView使用入门_面试_02

Kotlin语言基础从入门到熟悉

Android入门教程 | RecyclerView使用入门_flutter_03

Android 技术栈从入门到熟悉

Android入门教程 | RecyclerView使用入门_flutter_04

Android Jetpack 全家桶全面学习

Android入门教程 | RecyclerView使用入门_职场和发展_05

对于新手来说可能安装Android Studio存在一定困难你可以看着以下视频,一步步的跟着学习安装运行

Android Studio 安装教程

Android入门教程 | RecyclerView使用入门_flutter_06

有了Java阶段的学习,这一阶段建议以视频学习为主辅以图书查漏补缺。如果以图书为主,可以根据图书讲解敲代码,辅以教学视频查漏补缺。遇到问题可以去百度,入门的问题一般会有很多人遇到,并且给出比较好的解答。

需要掌握基本知识点,比如四大组件如何使用、如何创建Service、如何进行布局、简单的自定义View、动画、网络通信等常见技术。

全套安卓基础教程

Android入门教程 | RecyclerView使用入门_android studio_07

Android入门教程 | RecyclerView使用入门_flutter_08

Android入门教程 | RecyclerView使用入门_flutter_09

Android入门教程 | RecyclerView使用入门_android_10


Android入门教程 | RecyclerView使用入门_面试_11


Android入门教程 | RecyclerView使用入门_android studio_12


Android入门教程 | RecyclerView使用入门_面试_13


标签:ViewHolder,layout,VH,入门教程,item,Android,RecyclerView
From: https://blog.51cto.com/u_16163452/7946920

相关文章

  • Android入门教程 | DrawerLayout 侧滑栏
    DrawerLayout是实现了侧滑菜单效果的控件。DawerLayout分为侧边菜单和主内容区两部分:主内容区要放在侧边菜单前面,还有就是主内容区最好以DrawerLayout最好为界面的根布局,否则可能会出现触摸事件被屏蔽的问题。侧滑菜单部分的布局必须设置layout_gravity属性,表示侧滑菜单是在......
  • android 升级到java11,升级到androidx的操作方法
    androidstudioAndroid9(28)升级到Android10(29)Androidx小计_sdk29对应依赖androidx.appcompat:appcompat-resources是-CSDN博客java.lang.NoClassDefFoundError:Failedresolutionof:Landroidx/appcompat/R$drawable;-简书(jianshu.com)......
  • Android 一例Base64错误问题
    在Android11下正常,8.1下不正常修改importimportorg.apache.commons.codec.binary.Base64;为importandroid.util.Base64;publicstaticStringencrypt(Stringdata){try{SecretKeysecretKey=newSecretKeySpec(SECRET_KEY.getBytes(),ENCRYPT......
  • 一张图去除焦虑,我还能在Android这行继续“裸泳”
    每当新技术潮流兴起时,总会有人声称它们将使"程序员"失业,例如云服务、低代码等等...云原生的出现甚至引发了一种观点,认为很多程序员工作将会集体下岗,生成式技术正在颠覆多个行业,有专家预言在三年内编程将终结...今年,随着技术的不断突破和创新,它们具备更加完善的能力,可以应用于多个工......
  • Android(S)系统属性服务详解
    1.简介 Android系统中,为统一管理系统的属性,设计了一个统一的属性系统,包括两部分:文件保存的持久属性和每次开机导入的cache属性,前者主要保存在.prop文件中,需要注意的是android属性的名称是有一定的格式要求。每个属性都有一个名称和值,他们都是字符串格式。属性被大量使用在Andro......
  • 如何在Android中获取图片路径
    Android中获取图片路径的方法在Android开发中,获取图片路径是一个常见的需求。下面介绍几种途径来实现获取图片路径的方法。途径一:从相册中获取图片路径要从相册中获取图片的路径,我们需要调用相应的系统接口实现。具体步骤如下:在Manifest文件中添加获取相册的权限:<uses-per......
  • 最新Unity 如何打包发布到Android
    Unity打包Android现在UnityHub已经做的非常好了,可以直接下载对应Unity版本所对应得JDK,NDK,SDK,直接可以通过unityhub下载避免了,各种版本不同导致的编译问题,大大的降低了初学者的打包发布的难度,本文详细讲解UnityAndroid打包以及在打包中间需要理解的点, 如下:(1) Unityhu......
  • Android转行的第一顺位是智能座舱?
    前言智能座舱是汽车中负责提供驾乘人员舒适性和安全性的部分,其包括了许多功能,如操控系统、娱乐系统、空调系统、通信系统、座椅系统、交互系统、感知系统等。在这些功能的实现上,AndroidFramework系统发挥着重要的作用。Android系统是一种基于Linux的开放源代码操作系统,广泛应用于......
  • 谷歌使用Jetpack Compose逐步重写Android 14,不会你还不知道吧?
    前言早在2019年,谷歌就推出了JetpackCompose,这是一种使用Kotlin开发原生安卓应用的编写方式,抛弃了常规基于XML的视图来设计应用UI,而是让开发者以声明方式创建设计。从那时起,谷歌就大力鼓励开发者在安卓应用中使用JetpackCompose,还使用JetpackCompose重构了其PlaySto......
  • app直播源码,android AES加密解密实现
     app直播源码,androidAES加密解密实现importandroid.util.Base64;importandroid.util.Log; importjava.security.Key; importjavax.crypto.Cipher;importjavax.crypto.SecretKeyFactory;importjavax.crypto.spec.DESedeKeySpec;importjavax.crypto.spec.IvParameterSpe......