安卓控件RecyclerVieW

news2024/11/15 15:32:37

文章目录

      • 导入依赖
      • 简单使用
      • 实现横向滚动
      • 瀑布式

  RecyclerView是官方在5.0之后新添加的控件,推出用来替代ListView和GridView的列表控件。为了保证RecyclerView在所有Android系统版本上都能使用。Google将RecyclerView控件定义在了AndroidX中,只需要在项目的build.gradle中添加RecyclerView库的依赖,就能保证在所有Android系统版本上都可以使用RecyclerView控件了。RecyclerView会回收视图重复利用。当列表滚动展示区域之外(宽度或高度超出父容器)时,RecyclerView不会销毁视图,而是将视图置于列表滑动方向准备显示的那端。这种渲染方式可以显著提高性能。

导入依赖

  file→Project Structure…→Dependencies→ app→ + → Library Dependency。
在这里插入图片描述

  输入androidx.recyclerview,然后点击Search。

在这里插入图片描述

简单使用

  修改activity_main.xml中的代码。在布局中加入RecyclerView控件也是非常简单的,先为RecyclerView指定一个id,然后将宽度和高度都设置为match_parent,这样RecyclerView就占满了整个布局的空间。需要注意的是,由于RecyclerView并不是内置在系统SDK当中的,所以需要把完整的包路径写出来。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

  自定义布局fruit_item.xml。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="60dp">
    <ImageView
        android:id="@+id/fruitImage"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="10dp"/>
    <TextView
        android:id="@+id/fruitName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="10dp" />
</LinearLayout>

  编写Fruit类。

public class Fruit {
    private String name;
    private int imageId;

    public Fruit(String name,int imageId){
        this.name = name;
        this.imageId = imageId;
    }
    public String getName(){
        return name;
    }
    public int getImageId(){
        return imageId;
    }
}

  创建一个继承自ArrayAdapter的自定义适配器FruitAdapter。

public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {

    private List<Fruit> mFruitList;

    static class ViewHolder extends RecyclerView.ViewHolder{
        ImageView fruitImage;
        TextView fruitName;
        public ViewHolder(View view){
            super(view);
            fruitImage = (ImageView)  view.findViewById(R.id.fruitImage);
            fruitName = (TextView) view.findViewById(R.id.fruitName);
        }
    }
    public FruitAdapter(List<Fruit> fruitList){
        mFruitList = fruitList;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item, parent, false);
        ViewHolder holder = new ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position){
        Fruit fruit = mFruitList.get(position);
        holder.fruitImage.setImageResource(fruit.getImageId());
        holder.fruitName.setText(fruit.getName());
    }

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

  最后修改MainActivity中的代码。

public class MainActivity extends AppCompatActivity {
    private  List<Fruit> fruitList = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initFruits(); // 初始化数据
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        FruitAdapter adapter = new FruitAdapter(fruitList);
        recyclerView.setAdapter(adapter);
    }
    private void initFruits(){
        for(int i = 0; i < 2; i++){
            Fruit apple = new Fruit("Apple", R.mipmap.ic_launcher);
            fruitList.add(apple);
            Fruit banana = new Fruit("banana", R.mipmap.ic_launcher);
            fruitList.add(banana);
            Fruit orange = new Fruit("orange", R.mipmap.ic_launcher);
            fruitList.add(orange);
            Fruit waternelon = new Fruit("waternelon", R.mipmap.ic_launcher);
            fruitList.add(waternelon);
            Fruit pear = new Fruit("pear", R.mipmap.ic_launcher);
            fruitList.add(pear);
            Fruit grape = new Fruit("grape", R.mipmap.ic_launcher);
            fruitList.add(grape);
            Fruit pineapple = new Fruit("pineapple", R.mipmap.ic_launcher);
            fruitList.add(pineapple);
        }
    }
}

在这里插入图片描述

实现横向滚动

  修改自定义布局fruit_item.xml。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     <!--修改部分-->
    android:orientation="vertical"
    android:layout_width="80dp"
    android:layout_height="match_parent">
   <!--修改部分-->
    <ImageView
        android:id="@+id/fruitImage"
        android:layout_width="40dp"
        android:layout_height="40dp"
        <!--修改部分-->
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp"/>
         <!--修改部分-->
    <TextView
        android:id="@+id/fruitName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         <!--修改部分-->
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp" />
         <!--修改部分-->
</LinearLayout>

  修改MainActivity中的代码。传入LinearLayoutManager.HORIZONTAL表示让布局横行排列

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initFruits(); // 初始化数据
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
    	// 新加代码
    	layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
    	// --------
        recyclerView.setLayoutManager(layoutManager);
        FruitAdapter adapter = new FruitAdapter(fruitList);
        recyclerView.setAdapter(adapter);
    }

在这里插入图片描述

瀑布式

  修改自定义布局fruit_item.xml。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="5dp">
    <ImageView
        android:id="@+id/fruitImage"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center_horizontal" />
    <TextView
        android:id="@+id/fruitName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:layout_marginTop="10dp" />
</LinearLayout>

  修改自定义布局fruit_item.xml。

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initFruits(); // 初始化数据
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        /*LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);*/
        StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(layoutManager);
        FruitAdapter adapter = new FruitAdapter(fruitList);
        recyclerView.setAdapter(adapter);
    }

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1984450.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三品PLM项目管理系统与CAD集成的实施指南

随着信息化技术的飞速发展&#xff0c;PLM产品生命周期管理系统与CAD三维计算机辅助设计软件的集成已成为企业研发创新的关键。本文将探讨PLM与三维CAD集成的重要性、实施要素、策略以及实际应用案例&#xff0c;为企业信息化建设提供参考。 PLM与三维CAD集成&#xff1a;信息化…

SQL进阶技巧:有序行转列问题如何保证不同字段内容有序性及内容一一对应?【collect_list函数有序性保证问题】

目录 0 问题描述【小红书面试题】 1 数据准备 2 问题分析 3 小结 0 问题描述【小红书】 有如下需求,需要将左边的表变换成右边的表,注意字段内容的顺序及对应内容的一致性。 第一个字段为name,第二个字段为subject,第三个字段为score,变换后要求subject按照语文、数学…

揭秘——DNS究竟是什么?

我们来聊聊网络世界中的一个重要角色——DNS。准备好了吗&#xff1f;让我们一起揭开DNS的神秘面纱吧&#xff01; DNS是什么&#xff1f; DNS&#xff0c;全称为域名系统&#xff08;Domain Name System&#xff09;&#xff0c;是互联网的一项核心服务。简单来说&#xff0…

IP地址HTTPS证书怎么申请?

IP地址证书的申请和部署是网络安全领域中一个特定而重要的环节&#xff0c;主要针对那些没有域名但需要确保通信安全的场景。下面将深入探讨IP地址证书申请部署的特点&#xff0c;包括无需域名、简化管理、准确填写信息、验证所有权、安装配置和测试验证等步骤。具体分析如下&a…

简单易懂的LLM三角原则,让你轻松开发大模型应用

不少朋友偷偷问我&#xff1a;“什么是LLM的三角原则&#xff1f;”今天就给大家仔细讲讲构建LLM应用的三角原则。这套原则其实不复杂&#xff0c;由“31”(一范式三原则)个基础组成&#xff0c;适合任何团队来实践。 说到以LLM为核心的应用&#xff0c;有不少人以为是高大上的…

每日期刊分享

检索:知网 G4 刊期:24年底版面; 收稿范围:收小学、初中、高中学段标准的教学设计、教学案例、教学 活动、教学反思、说课&#xff0c;教育故事稿件) 备注:不需要摘要、关键词等部分;参考20%内;理论稿多增加课本实 例 。

浏览器用户文件夹详解 - Secure Preferences(十一)

1.Secure Preferences简介 1.1 什么是Secure Preferences文件&#xff1f; Secure Preferences文件是Chromium浏览器中用于存储用户敏感信息和安全设置的一个重要文件。每当用户在浏览器中保存密码、设置安全选项或进行其他敏感操作时&#xff0c;这些信息都会被记录在Secure…

下一代 AI 搜索引擎 MindSearch:多智能体 + 系统2,模拟人类认知过程的 AI 搜索引擎

下一代 AI 搜索引擎 MindSearch&#xff1a;多智能体 系统2&#xff0c;模拟人类认知过程的 AI 搜索引擎 提出背景解法拆解实验评估开放集封闭集问答 论文大纲怎么进一步改进 MindSearch&#xff1f;1. 组合&#xff08;Combination&#xff09;2. 拆开&#xff08;Disassembl…

【iOS】class的底层结构总结

class的结构 方法缓存 我们先来整体看一下结构 class类中只有isa指针、superClass、cache方法缓存、bits具体的类信息 bits & FAST_DATA_MASK 指向一个新的结构体Class_rw_t&#xff0c; 里面包含着methods方法列表、properties属性列表、protocols协议列表、class_ro_…

C# 设计模式之外观模式

总目录 前言 在软件开发过程中&#xff0c;要完成一个功能&#xff0c;可能需要调用很多接口&#xff0c;不仅增加了代码间的耦合度&#xff0c;也增加了调试成本和维护的复杂度。不如我们把这些接口再封装一次&#xff0c;给一个很好的“外观”&#xff0c;让使用者使用更方便…

14. 计算机网络HTTPS协议(二)

1. 前言 上一章节中我们主要就 HTTPS 协议的前置知识进行介绍,下面会继续介绍 HTTPS 的通信过程以及抛出一些常见问题的探讨。因为候选人准备面试的时间和精力是比较有限的,我们在学习的过程要抓住重点,如果感觉对于细节缺乏了解,可以通过维基百科和查阅 StackOverflow 等…

美国大语言模型军事应用典型案例

源自&#xff1a;北京科技大学机械工程学院 作者&#xff1a;陈哲涵 黎学臻 注&#xff1a;若出现无法显示完全的情况&#xff0c;可 V 搜索“人工智能技术与咨询”查看完整文章 人工智能、大数据、多模态大模型、计算机视觉、自然语言处理、数字孪生、深度强化学习 课程也可…

AbMole革命性发现:CUDC-907——单一分子双重抑制PI3K与HDAC的创新突破

在生物医学研究的浩瀚宇宙中&#xff0c;科学家们不断探索着新的方法来对抗复杂的疾病机制。今天&#xff0c;我们要探讨的是一项令人瞩目的研究成果——CUDC-907&#xff0c;这一创新分子在抑制PI3K&#xff08;磷脂酰肌醇3-激酶&#xff09;和HDAC&#xff08;组蛋白去乙酰化…

c++——map、set底层之AVL树(动图演示旋转)

在上一篇博客里面我们提到了set和map的使用&#xff1b;这篇博客重点介绍他们的底层逻辑 c之set和map——关联容器&#xff08;非顺序容器——list、vector&#xff09; 目录 文章目录 前言 一、底层结构 二、AVL 树 1.AVL树的概念 2.AVL树节点的定义 3、AVL树的插入 三、 AVL树…

Databend 开源周报第 156 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend。 支持 Share Cata…

深入解读 Scrapy 框架原理与源码

&#x1f6e0;️ Scrapy 框架原理解读 Scrapy 是一个强大的 Python 爬虫框架&#xff0c;其设计理念基于事件驱动的异步编程&#xff0c;通过高度模块化的方式实现爬虫功能。Scrapy 框架的核心组成包括爬虫&#xff08;Spider&#xff09;、调度器&#xff08;Scheduler&#…

大模型书籍推荐:《大规模语言模型:从理论到实践》

书籍简介 在当前的人工智能领域&#xff0c;大规模语言模型&#xff08;Large Language Models, LLMs&#xff09;无疑是最重要的研究方向之一。它们不仅在自然语言处理方面取得了显著成果&#xff0c;还为其他领域带来了革命性的变化。《大规模语言模型&#xff1a;从理论到实…

维语驾考这款软件有人用过吗?靠谱吗?

维语驾考是专门为维吾尔语学车考驾照的学员而准备的驾考刷题软件。书写延续维语用法自右向左书写&#xff0c;可调节字号大小&#xff0c;支持维汉双语切换。2024驾考新规题库&#xff0c;内含科目一、科目四全真题库&#xff0c;每道题配备详细解析&#xff0c;帮助学员理解透…

Openwrt配置ZeroTier,实现公网访问内网中服务器

ZeroTier注册&Openwrt初始配置 首先来到Openwrt的VPN→ZeroTier页面&#xff0c;进行一个很简单的注册 注册后去zerotier的网页管理页面进行一个很简单的创建网络 复制网络ID备用 在openwrt填写网络ID并启用。如果你需要访问内网主机勾上 自动客户端NAT 在zerotier网络管理…