RecyclerView的使用(一)

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

目录

 

1.RecyclerView概述

2.RecyclerView的简单使用

3.改变布局管理器,RecyclerView的变化


1.RecyclerView概述

在谷歌Android官网,给RecyclerView的描述是:

那RecyclerView凭什么要比ListView要更高级?更灵活?

答案是,RecyclerView可以自定义布局管理器来决定item的排布规则。如,

LinearLayoutManager、GridLayoutManager、StaggeredGridLayoutManager 等。

2.RecyclerView的简单使用

那我们先用LinearLayoutManager来实现一个简单的列表吧

首先在Gradle添加RecyclerView的依赖

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

在layout里面使用RecyclerView

<androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/rv_successive_dynasties_huoying"android:layout_width="match_parent"android:layout_height="match_parent" />

在MainActivity里面实例化RecyclerView,并设置LayouManager和Adapter

private void initView()
{recyclerView = findViewById(R.id.rv_successive_dynasties_huoying);// 线性布局管理器LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);recyclerView.setLayoutManager(linearLayoutManager);// 用于描述item的适配器recyclerAdapter = new RecyclerAdapter(huoyingList);recyclerView.setAdapter(recyclerAdapter);
}

实现RecyclerViewAdpater

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder>
{private List<Huoying> huoyingList;public RecyclerAdapter(List<Huoying> huoyingList){this.huoyingList = huoyingList;}@NonNull@Overridepublic RecyclerAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType){View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);ViewHolder viewHolder = new ViewHolder(itemView);return viewHolder;}@Overridepublic void onBindViewHolder(@NonNull RecyclerAdapter.ViewHolder holder, int position){holder.name.setText(huoyingList.get(position).getName());holder.number.setText(String.valueOf(huoyingList.get(position).getNumber()));holder.trump.setText(huoyingList.get(position).getTrump());}@Overridepublic int getItemCount(){return huoyingList.size();}class ViewHolder extends RecyclerView.ViewHolder{TextView name; //火影名字TextView number; //火影的代号TextView trump; //他的绝招public ViewHolder(@NonNull View itemView){super(itemView);this.name = itemView.findViewById(R.id.tv_name);this.number = itemView.findViewById(R.id.tv_number);this.trump = itemView.findViewById(R.id.tv_trump);}}
}

RecyclerAdapter的关键在与

RecyclerAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType){}
void onBindViewHolder(@NonNull RecyclerAdapter.ViewHolder holder, int position) {}

onCreateViewHolder用于将item.xml实例化,并以ViewHolder的形式呈现,

onBindViewHolder用于在初始和滑动RecyclerView时,给item里面的子控件赋值。

其实按照我的浅显理解,onCreateViewHolder和onBindViewHolder加起来就类似于ListView adapter里面的

View getView(int position, View itemView, ViewGroup parent)

你看getView()里面既有parent可以用来实例化item.xml,又有position可以找到item位置来赋值,是不是就如同onCreateViewHolder

和onBindViewHolder的功能!

差异就只是在item的表示形式从View变成了ViewHolder。

item.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="wrap_content"android:orientation="horizontal"android:weightSum="3"><TextViewandroid:id="@+id/tv_name"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:text="千手柱间" /><TextViewandroid:id="@+id/tv_number"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:text="1" /><TextViewandroid:id="@+id/tv_trump"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:text="木遁" /></LinearLayout>

再看看,我是怎么描述火影的


public class Huoying
{private int number;private String name;private String trump;public Huoying(int number, String name, String trump){this.number = number;this.name = name;this.trump = trump;}public String getName(){return name;}public void setName(String name){this.name = name;}public String getTrump(){return trump;}public void setTrump(String trump){this.trump = trump;}public int getNumber(){return number;}public void setNumber(int number){this.number = number;}@Overridepublic String toString(){return "Huoying{" +"number=" + number +", name='" + name + '\'' +", trump='" + trump + '\'' +'}';}
}

最后我们在MainActivity里面给将历代火影数据传递给adapter

public class MainActivity extends AppCompatActivity
{private RecyclerView recyclerView;private RecyclerAdapter recyclerAdapter;private List<Huoying> huoyingList;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initData();initView();setListener();}private void initData(){huoyingList = new ArrayList<>(7);huoyingList.add(new Huoying(1, "千手柱间", "木遁"));huoyingList.add(new Huoying(2, "千手扉间", "水遁"));huoyingList.add(new Huoying(3, "猿飞日斩", "猿魔"));huoyingList.add(new Huoying(4, "波风水门", "飞雷神"));huoyingList.add(new Huoying(5, "千手纲手", "百豪之术"));huoyingList.add(new Huoying(6, "旗木卡卡西", "雷切"));huoyingList.add(new Huoying(7, "漩涡鸣人", "螺旋丸"));}private void initView(){recyclerView = findViewById(R.id.rv_successive_dynasties_huoying);LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);recyclerView.setLayoutManager(linearLayoutManager);recyclerAdapter = new RecyclerAdapter(huoyingList);recyclerView.setAdapter(recyclerAdapter);}private void setListener(){}
}

我把完整的R.layout.activity_main也贴出来

<?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="vertical"><TextViewandroid:id="@+id/tv_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:gravity="center"android:text="历代火影" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:weightSum="3"><TextViewandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:text="名字" /><TextViewandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:text="序号" /><TextViewandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:text="绝招" /></LinearLayout><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/rv_successive_dynasties_huoying"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>

 

编译运行,效果如下:

 

3.改变布局管理器,RecyclerView的变化

我们在使用LinearLayoutManager来管理item的样式时,LinearLayoutManager的默认Orientation是LinearLayout.VERTICAL

所以我们可以改成LinearLayout.HORIZONTAL,看看RecyclerView会是怎样的效果

linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);

编译运行,效果如下:

就变成了横滑显示。

我们再试试GridLayoutManager

GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);
spanCount设置为3,看看运行效果:

虽然文件看的有点辛苦,但RecyclerView确实变成了有3列数据的网状结构。

还有一些其他的布局管理器大家可以自己慢慢尝试^_^

4.源码下载

https://github.com/messiwangzi/RecyclerView

 

 

 

 


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

相关文章

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…

JavaScript ES6新特性

JavaScript ES6带来了新的语法和特性&#xff0c;使得代码更加的现代和可读。它包括许多重要功能&#xff0c;如箭头函数、模板字符串、解构赋值等等。 const 和 let const 是 ES6 中用于声明变量的新关键字。const 比 var 强大。一旦使用&#xff0c;变量就不能重新分配。换…

ES6必须知道的六大新特性

ES6 ES6新特性-let&const 使用const表示常量&#xff08;声明之后不允许改变&#xff0c;一旦声明必须初始化&#xff0c;否则会报错&#xff09; //ES6 常量 不能修改const b2;b3;//Uncaught TypeError: Assignment to constant variable.console.log(b);使用var声明的…

ES6中有哪些新特性?

ES6中的新特性(一) ECMAScript6.0&#xff08;以下简称 ES6&#xff09;是 JavaScript 语言的下一代标准&#xff0c;已经在 2015 年 6 月正式发布了。它的目标&#xff0c;是使得 JavaScript 语言可以用来编写复杂的大型应用程序&#xff0c;成为企业级开发语言。 我们来看看…

面试题!es6新特性

es6新特性 ECMAScript 6(ES6) 目前基本成为业界标准&#xff0c;它的普及速度比 ES5 要快很多&#xff0c;主要原因是现代浏览器对 ES6的支持相当迅速&#xff0c;尤其是 Chrome 和 Firefox 浏览器&#xff0c;已经支持 ES6 中绝大多数的特性。 以下是一些常用到的es6新特性&…

es6的8条新特性总结

es6的8条新特性总结 认识es61.块级作用域变量&#xff08;let和const&#xff09;2.箭头函数3.模板字符串4.解构赋值5.默认参数6. 扩展运算符7. 类和继承8.Promise 认识es6 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript的新版本&#xff0c;引入了许多新特性和语法…

最全的—— ES6有哪些新特性?

目录 ES6新特性1、let和const2、symbol3、模板字符串3.1 字符串新方法&#xff08;补充&#xff09; 4、解构表达式4.1 数组解构4.2 对象解构 5、对象方面5.1 Map和Set5.1.1 Map5.1.2 Set 5.3 数组的新方法5.3.1 Array.from()方法5.3.2 includes()方法5.3.3 map()、filter() 方…

GWAS分析中协变量的区分(性别?PCA?初生重?)

1. 电子书领取 前几天发了一篇GWAS电子书分享&#xff0c;异常火爆&#xff0c;阅读量8000&#xff0c;很多人评价比较基础。这本电子书主要特点是比较基础&#xff0c;GLM模型用软件和R语言进行比较&#xff0c;如何添加数字协变量、因子协变量、PCA等内容&#xff0c;可以说…

时间序列 工具库学习(5) Darts模块-多个时间序列、预训练模型和协变量的概念和使用

1.实验目的 此笔记本用作以下目的&#xff1a; 在多个时间序列上训练单个模型使用预训练模型获取训练期间未见的任何时间序列的预测使用协变量训练和使用模型 2.导库 # fix python path if working locally from utils import fix_pythonpath_if_working_locallyfix_python…

Mplus数据分析:随机截距交叉之后的做法和如何加协变量,写给粉丝

记得之前有写过如何用R做随机截距交叉滞后&#xff0c;有些粉丝完全是R小白&#xff0c;还是希望我用mplus做&#xff0c;今天就给大家写写如何用mplus做随机截距交叉滞后。 做之前我们需要知道一些Mplus的默认的设定&#xff1a; observed and latent exogenous variables a…

中介变量、调节变量与协变量

在平时看论文过程中偶会接触到这几个概念&#xff0c;然而都没想过弄明白&#xff0c;每次总觉得只要看明白个大概反正自己又不用这种方法…作为科研人&#xff0c;还是应该保持谦逊&#xff0c;保持学习 一、中介变量 1.概念 中介变量&#xff08;mediator&#xff09;是自…