AndroidStudio中RecyclerView用法

article/2025/11/10 5:14:11

去年写了几篇关于Android的基础知识点,没想到收到了很多朋友的好评,不过后来太忙了没有继续更新,真的蛮遗憾的。最近又要用到Android啦,超级无敌巨重要的RecyclerView怎么能不讲一讲呢!!

1.什么是RecyclerView?

在介绍RecyclerView之前,首先要知道他能实现什么呢——列表!(各种花里胡哨的列表哈哈哈)

    

上面的图框起来的部分都是用RecyclerView实现的,不过他们都不够花里胡哨,其实RecyclerView可以实现更加复杂的列表,在下面的介绍中争取弄一个花里胡哨的吧~不过说到底,RecyclerView到底是啥呢??可以把它理解成一块空间,就像刚刚图片上圈出来的地方,就是一块空间,仅仅定义一个RecyclerView,就可以得到这块空间,但也就仅仅只有这块空间,里面什么也没有的。里面的东西怎么装进去呢,就要涉及RecyclerView的另外两个配套神器了!!item.xml和adpter.java啦,下面会详细介绍。

截止现在,要清楚的一点就是,RecyclerView可以实现列表,而什么是列表呢?大致就是重复同一个样式的元素,形成了一个有顺序的列表(实在不知如何解释,大家都懂的吧)

2.RecyclerView的配套神器

item.xml(其实item只是一个名字,完全可以自定义的哈)

作用:定义列表中,一条数据的样式!!(为了方便说明,下文就叫它item了哈)

(什么是一条数据呢?例如下面这个图片中,绿色框起来的就是RecyclerView占得一块空间,在这个空间里面,装着整个列表,而列表中的一条数据,就是红色框起来的部分)

一个item的样式可以很复杂(像这个火锅团购的一样,有图片、各种文字、按钮,甚至更复杂),也可以很简单(像最上面的举例一样,就一张图),我这里举一个例子吧,只为突出重点,没有任何美工,别嫌弃啊!

怎么实现这样一条数据的样式呢?

(storelist_item.xml) 记住它的名字哦!!后面会串起来~

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:orientation="horizontal"android:layout_height="200dp"><LinearLayoutandroid:layout_width="match_parent"android:layout_weight="4"android:layout_height="200dp"><ImageViewandroid:id="@+id/image_store"android:layout_width="match_parent"android:layout_height="100dp"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_weight="1"android:orientation="vertical"android:layout_height="200dp"><TextViewandroid:id="@+id/tv_store_name"android:layout_width="match_parent"android:layout_height="30dp"android:textSize="24sp"/><TextViewandroid:id="@+id/tv_store_address"android:layout_width="match_parent"android:layout_height="30dp"android:textSize="24sp"/><TextViewandroid:id="@+id/tv_store_serve"android:layout_width="match_parent"android:layout_height="30dp"android:textSize="24sp"/></LinearLayout></LinearLayout>

注意点:和普通页面的布局没啥区别,也是各种LinearLayout或者RelativeLayout搞定。但是每个组件,最好都要给一个Id哦!!

 

adapter.java

搞定了item.xml,接下来就是弄适配器了~

作用:动态的给item赋值

一个列表由很多个item组成,但是总不能让每个item都长一样吧,所以每个列表的具体内容,就是adapter来把关,初学看到adapter真的都有点怕,至少我当初是这样的嘤嘤嘤,其实adapter里面的内容也是很套路的,知道那部分做啥就知道该怎么改怎么用了。

先分析一下,要实现动态给item赋值需要思考三点:

  1. 具体是给item里面的那个小部件赋值呢?
  2. 找到了这个小部件,赋什么值呢?
  3. 要给好多个item赋值呢?

上面的三个问题,就对应了adapter里面的三个方法

1.具体是给item里面的那个小部件赋值呢?

2.找到了这个小部件,赋什么值呢?

3.要给好多个item赋值呢?

下面贴了storelist_item.xml对应的adapter(StoreListAdapter.java)的代码,只需要弄懂刚刚提到的三部分的作用和对应的位置就行。

注意:LinearViewHolder(LayoutInflater.from(mContext).inflate(R.layout.storelist_item,parent,false)); 适配器和item.xml就是这句话连接起来的!!

package com.example.wmn.pet;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;public class StoreListAdapter extends RecyclerView.Adapter <StoreListAdapter.LinearViewHolder>{private Context mContext;String[] names = {"菠菜宠物店1","菠菜宠物店2", "菠菜宠物店3", "菠菜宠物店4"};String[] address = {"重庆市北碚区天生路1号","重庆市北碚区天生路2号","重庆市北碚区天生路3号","重庆市北碚区天生路4号"};String[] serves = {"服务1","服务2","服务3","服务4"};int[] imags={R.drawable.store1,R.drawable.store2,R.drawable.store3,R.drawable.store4};public StoreListAdapter(Context context){this.mContext=context;}//构造方法@Override//返回一个ViewHolder//public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)public StoreListAdapter.LinearViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {return new LinearViewHolder(LayoutInflater.from(mContext).inflate(R.layout.storelist_item,parent,false));}@Override//绑定ViewHolder//public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {public void onBindViewHolder(StoreListAdapter.LinearViewHolder holder, final int position) {holder.tv_name.setText(names[position]);holder.tv_address.setText(address[position]);holder.tv_serve.setText(serves[position]);holder.image.setImageResource(imags[position]);}@Override//获取列表长度public int getItemCount() {return 4;}class LinearViewHolder extends RecyclerView.ViewHolder {//找到组件private TextView tv_name,tv_address,tv_serve;private ImageView image;public LinearViewHolder(View itemView) {super(itemView);tv_name = itemView.findViewById(R.id.tv_store_name);tv_address = itemView.findViewById(R.id.tv_store_address);tv_serve = itemView.findViewById(R.id.tv_store_serve);image=itemView.findViewById(R.id.image_store);}}
}

使用RecyclerView

1.声明。RecyclerView也和普通组件一样,要用的话在xml里面声明哦

 <android.support.v7.widget.RecyclerViewandroid:id="@+id/rv_grid_home"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#8BC34A" />

2.在java里面进一步定义

public class MainActivity extends AppCompatActivity {private RecyclerView rv_storelist;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);rv_storelist = findViewById(R.id.rv_grid_home);rv_storelist.setLayoutManager(new LinearLayoutManager(MainActivity.this));rv_storelist.setAdapter(new StoreListAdapter(MainActivity.this));}
}

代码不多,就这几句,重要的三句我们一句一句解释哈

 rv_storelist = findViewById(R.id.rv_grid_home);  在xml里面声明了一个RecyclerView,给它取了一个id,这里需要用id找到它
 rv_storelist.setLayoutManager(new LinearLayoutManager(MainActivity.this));  这里是要设置item们的布局,是一行一个?还是一行2个?还是交错着那个瀑布布局啥的?如果item是要一行一个的布局,那就LinearLayoutManager如果是一行多个就GridLayoutManager
 rv_storelist.setAdapter(new StoreListAdapter(MainActivity.this)); 给RecyclerView设置适配器

截止现在,一个完整的RecyclerView的demo就搞定啦!!其实真的不难,但是好难讲清楚啊!那种词不达意的感觉真难受,来一波总结吧

  • item.xml+adapter.java 决定 RecyclerView的样式
  • 使用RecyclerView要在xml里面当组件用,在java里面进一步设置
  • item的动态绑定数据,其实不一定要像刚才那样,在.java文件里面已经写好了,这些数据可以是从上一个页面跳转过来时传递的数据,也可以是从数据库里面读出来的数据...

 

如果你有什么不清楚的,欢迎留言交流....这篇博客写得真的好差,我会不定期继续修改完善的...


http://chatgpt.dhexx.cn/article/Dleko0aY.shtml

相关文章

为RecyclerView打造通用Adapter 让RecyclerView更加好用

转载请标明出处&#xff1a; http://blog.csdn.net/lmj623565791/article/details/47251585&#xff1b; 本文出自:【张鸿洋的博客】 一、概述 记得好久以前针对ListView类控件写过一篇打造万能的ListView GridView 适配器&#xff0c;如今RecyclerView异军突起&#xff0c;…

RecyclerView的基本用法

RecyclerView 是一个增强版的ListView&#xff0c;不仅可以实现和ListView同样的效果&#xff0c;还优化了ListView中存在的各种不足之处 ResyslerView 能够实现横向滚动&#xff0c;这是ListView所不能实现的 目前官方更加推荐使用RecyclerView. 1.实现垂直方向的滚动 在 …

RecyclerView安卓androidx.widget.RecyclerView

导入RecyclerView implementation com.android.support:recyclerview-v7:28.0.0或者把常用的组件都导入了&#xff0c;包括了RecyclerView implementation com.android.support:design:28.0.01.RecyclerView介绍 RecyclerView它可以说是一个增强版的ListView。ListView由于其…

RecyclerView的基本使用

RecyclerView是Android一个更强大的控件,其不仅可以实现和ListView同样的效果,还有优化了ListView中的各种不足。其可以实现数据纵向滚动,也可以实现横向滚动(ListView做不到横向滚动)。接下来讲解RecyclerView的用法。 RecyclerView 基本用法 因为RecyclerView属于新增的控件,…

RecyclerView 的使用(androidx)

文章目录 一、导包二、基本使用三、设置分割线四、自定义点击事件五、实现 GridView六、实现瀑布流七、更多效果八、RecyclerView 常见问题九、RecyclerView 和 ScrollView 嵌套的问题 一、导包 implementation androidx.recyclerview:recyclerview:1.1.0二、基本使用 2.1、首…

RecyclerView简单使用(非常详细)

星期六&#xff0c;又是撸代码的一天 作为一个初级都算不上的小白&#xff0c;一步一个脚印的学吧&#xff0c;学一个记一个 今天记录的是RecyclerView RecyclerView 简述创建布局添加 RecyclerView和每个list布局&#xff08;偏新手向&#xff0c;选择性跳过&#xff09; 创建…

androidx.recyclerview:recyclerview的使用

添加扩展 或手动修改app/build.gradle&#xff1a; 在dependencies里添加 implementation androidx.recyclerview:recyclerview:1.0.0新建布局layout item布局fruit_item.xml&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayo…

Android学习之RecyclerView的使用

RecyclerView是Android 5.0推出的&#xff0c;是support-v7包中的新组件,它被用来代替ListView和GridView&#xff0c;并且能够实现瀑布流的布局&#xff0c;更加高级并且更加灵活&#xff0c;提供更为高效的回收复用机制&#xff0c;同时实现管理与视图的解耦合。 官方文档解释…

RecyclerView剖析

####简介   本文将从RecyclerView实现原理并结合源码详细分析这个强大的控件。阅读本文要求&#xff1a;1、熟悉android控件绘制&#xff0c;2、了解动画&#xff0c;3、了解Scroller.本文所示源码版本是23.2.0。 ####基本使用   RecyclerView的基本使用并不复杂&#xff…

RecyclerView的使用(一)

目录 1.RecyclerView概述 2.RecyclerView的简单使用 3.改变布局管理器&#xff0c;RecyclerView的变化 1.RecyclerView概述 在谷歌Android官网&#xff0c;给RecyclerView的描述是: 那RecyclerView凭什么要比ListView要更高级&#xff1f;更灵活&#xff1f; 答案是&#x…

RecyclerView详解

RecyclerView 简称 RV&#xff0c; 是作为 ListView 和 GridView 的加强版出现的&#xff0c;目的是在有限的屏幕之上展示大量的内容&#xff0c;因此 RecyclerView 的复用机制的实现是它的一个核心部分。 RV 常规使用方式如下&#xff1a; 解释说明。 setLayoutManager&…

RecyclerView(三)—— RecyclerView的缓存机制

RecyclerView内存优越性&#xff0c;得益于它独特的缓存机制。 1 如何复用表项 如果列表中的每个表项在移出屏幕时被销毁&#xff0c;移入时又被重新创建&#xff0c;是很消耗资源&#xff0c;所以RecyclerView引入了缓存机制。缓存是为了复用&#xff0c;复用的好处是有可能…

RecyclerView详解一,使用及缓存机制

本文大致会先讲解RecyclerView的基础知识及使用&#xff0c;最后会深入讲解一点原理。当然&#xff0c;本人知识水平有限哈&#xff0c;太深入的东西我现在还没接触到&#xff0c;还请大家包容&#xff0c;阿里嘎多~ 一、RecyclerView的历史与发展 既然讲到了RV&#xff0c;那…

Android开发—RecyclerView使用

1.RecyclerView是什么 RecyclerView 在Android中用于创建列表。 官网的解释为&#xff1a; RecyclerView 可以让您轻松高效地显示大量数据。您提供数据并定义每个列表项的外观&#xff0c;而 RecyclerView 库会根据需要动态创建元素。 当RecyclerView的列表项滚出屏幕的时候&a…

Android RecyclerView使用简述

RecyclerView使用简述 前言正文一、创建项目二、RecyclerView基本使用① item布局和适配器② 显示数据③ 添加Item点击事件④ 添加Item子控件点击事件⑤ 添加长按事件⑥ 多个子控件点击事件 三、RecyclerView ViewBinding使用① 适配器② 显示数据③ 添加控件点击和长按 四、R…

es6新特性总结及使用说明

目录 简介 新特性说明 let语法 const语法 解构赋值 模板字符串 对象简写 对象操作--深拷贝 箭头函数 小结 简介 1. ECMAScript 6.0是 JavaScript 语言的下一代标准&#xff0c; 2015 年 6 月发布。 ES6 设计目标是达到 JavaScript 语言可以用来编写复杂的大型程序&a…

ES6有哪些新特性

ES6有哪些新特性(1)变量声明:由var变为let和const; (2)模板字符串:使用反引号;在模板字符串里面支持换行,并可以在里面使用${}来包裹一个变量或表达式; (3)解构:有数组解构和对象解构;可以快速获取数组和对象的值; (4) 展开运算符:在ES6中用…来表示展开运算符,它可以将数组…

ES6 新特性知识点总结

文章目录 ES6let及const解构赋值模板字符串Symbol类型Set和Map数据结构箭头函数类 ES6 ES 的全称是 ECMAScript , 它是由 ECMA 国际标准化组织,制定的一项脚本语言的标准化规范。 ES6 实际上是一个泛指&#xff0c;泛指 ES2015 及后续的版本。 每一次标准的诞生都意味着语言的…

ES6 新特性

1 、ES6 新特性 现在使用主流的前端框架中&#xff0c;如ReactJS、Vue.js、angularjs等&#xff0c;都会使用到ES6的新特性&#xff0c;作为一名高级工程师而言&#xff0c;ES6也就成为了必修课&#xff0c;所以本套课程先以ES6的新特性开始。 1.1、了解ES6 ES6&#xff0c;…

ES6新特性总结-面试必会

文章目录 一、let和const二、Symbol三、模板字符串3.1 什么是模板字符串3.2 字符串新方法 四、解构表达式4.1 数组解构4.2 对象解构 五、Set()、map()数据结构5.1 map()是什么及写法&#xff1f;5.1.1 map()是什么及写法&#xff1f;5.1.2 map()下的内置方法&#xff1a; 5.2 S…