介绍 在Android应用程序中,只要您想显示数据列表,就可以使用 RecyclerView 。 早期的Android提供 ListView 了同样的东西。 RecyclerView 可以被认为是一个更高级和性能优化的版本 ListView 。 顾名思义, RecyclerView 也可以使用 ViewHolder 模式 回收物

介绍

在Android应用程序中,只要您想显示数据列表,就可以使用RecyclerView。早期的Android提供ListView了同样的东西。RecyclerView可以被认为是一个更高级和性能优化的版本ListView。顾名思义,RecyclerView也可以使用ViewHolder模式回收物品。除此之外,它还使用了一个LayoutManager更灵活的方法来创建水平,垂直甚至交错的列表。它还提供垂直和水平滚动以及项目动画。虽然ListView也可以修改为使用' ViewHolder'模式,RecyclerView强制使用相同的模式。它甚至可以处理大量数据,同时提供响应式界面。

在这篇文章中,我们将看到如何RecyclerView使用Android Studio在Android应用程序中实现一个简单的。我将使用Android studio版本。

创建一个新项目

  1. 打开Android Studio。转到文件 - >“新建项目”,填写应用程序名称和其他详细信息,选择API版本为API 15。选择清空活动,在下一个屏幕中保留默认选项,然后单击完成。将创建新项目以及所需文件。(在示例中,我将应用程序名称指定为“ SimpleRecyclerViewExample”并将包装为“ com.example”
  2. 要使用RecyclerView,我们需要添加recycleler视图依赖项。打开build.gradle(Module:app)文件,并com.android.support:recyclerview-v7:26.1.0在dependencies部分添加以下“implementation' '”。单击立即同步以同步更改并构建项目。
  3. 在布局文件夹中打开activity_main.xml并添加Recycler View小部件。更改后,XML文件应如下所示:
隐藏   复制代码
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.simplerecyclerviewexample.MainActivity"> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/rvFootballTeamInfo" android:scrollbars="vertical" ></android.support.v7.widget.RecyclerView> </android.support.constraint.ConstraintLayout>

对于Recycler视图,我们提供了一个id并指定了滚动条是垂直的。

创建模型类和布局文件

  1. 我们将在Recycler视图中显示足球队相关信息。我们将创建一个用于存储信息的模型类。创建一个类FootballTeam.java和创建变量Name,League和YearEstablished。

    隐藏   收缩    复制代码
    package com.example.simplerecyclerviewexample;
    
    public class FootballTeam {
    
        private String name;
    private String league;
    private int yearEstablished; public FootballTeam() { } public FootballTeam(String name, String league, int yearEstablished) {
    this.name = name;
    this.league = league;
    this.yearEstablished = yearEstablished;
    } public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    } public String getLeague() {
    return league;
    } public void setLeague(String league) {
    this.league = league;
    } public int getYearEstablished() {
    return yearEstablished;
    } public void setYearEstablished(int yearEstablished) {
    this.yearEstablished = yearEstablished;
    }
    }
  2. 创建一个名为row.xml的布局文件。此布局将用于在回收站视图中显示每条记录。我们将创建一个RelativeLayout包含三个文本视图的简单视图,用于显示已建立的名称,联盟和年份。布局的完整XML如下所示:
    隐藏   收缩    复制代码
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingBottom="16dp" android:paddingLeft="16dp" android:paddingRight="16dp" android:paddingTop="16dp" > <TextView android:id="@+id/tvName" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" tools:text="Team Name" android:textSize="20dp" android:textStyle="bold" /> <TextView android:id="@+id/tvLeague" android:layout_width="match_parent" android:layout_height="wrap_content" tools:text="Team League" android:layout_below="@id/tvName" /> <TextView android:id="@+id/tvYear" android:layout_width="wrap_content" android:layout_height="wrap_content" tools:text="1999" android:layout_alignParentRight="true" /> </RelativeLayout>

对于这个例子,我直接对填充和textSizeXML进行了硬编码,但在单独的XML文件中使用它是一个好主意。我使用了“ tools:Text”属性来了解我的布局在设计器中的外观。运行应用程序时不会呈现相同的内容。

创建适配器

现在我们已经创建了Model项目布局,现在是时候创建我们的adapter类了。该adapter班是负责创建ViewHolder对象和数据绑定到他们。

  1. 创建一个名为MyAdapter.java的类,并输入以下代码:

    隐藏   收缩    复制代码
    package com.example.simplerecyclerviewexample;
    
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.LinearLayout;
    import android.widget.TextView; import java.util.List; public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { public List<FootballTeam> teamList; public MyAdapter(List<FootballTeam> footballTeamList) {
    teamList = footballTeamList;
    } public class ViewHolder extends RecyclerView.ViewHolder { TextView name, league, yearEstablished; public ViewHolder(View itemView) {
    super(itemView);
    name = (TextView) itemView.findViewById(R.id.tvName);
    league = (TextView) itemView.findViewById(R.id.tvLeague);
    yearEstablished = (TextView) itemView.findViewById(R.id.tvYear);
    }
    } public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row,parent, false); return new ViewHolder(view);
    } @Override
    public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) {
    holder.name.setText(teamList.get(position).getName());
    holder.league.setText(teamList.get(position).getLeague());
    holder.yearEstablished.setText(String.valueOf
      (teamList.get(position).getYearEstablished()));
    } @Override
    public int getItemCount() {
    return teamList.size();
    }
    }

我们的Adapter类扩展了RecyclerView.Adapter类并管理所有ViewHolder对象。我们ViewHolder在适配器中定义了类,并TextView在ViewHolder构造函数中初始化了s 。

适配器负责ViewHolder根据需要创建对象。viewHolder当用户滚动列表项时,它还创建了新的对象。我们需要覆盖三种重要的方法。

“ onCreateViewHolder()”方法用于创建ViewHolder,我们正在膨胀我们之前在其中创建的布局。

“ onBindViewHolder()”方法用于将数据绑定到ViewHolder。它根据列表位置确定需要显示的数据并填充ViewHolder。

“ getItemCount()”方法返回的大小dataset。在我们的例子中,这将是该项目中的项目数量teamList。

我们还创建了一个构造函数,我们将使用它来分配teamList我们将通过我们的集合Mainactivity。现在我们已经创建了适配器,现在是将所有内容绑定在一起的时候了。

主要活动变化

  1. 打开MainActivity.java并进行如下所示的更改:

    隐藏   收缩    复制代码
    package com.example.simplerecyclerviewexample;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView; import java.util.ArrayList;
    import java.util.List; public class MainActivity extends AppCompatActivity {
    RecyclerView rvTeams;
    List<FootballTeam> teamList = new ArrayList<>();
    MyAdapter adapter; @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); rvTeams = (RecyclerView) findViewById(R.id.rvFootballTeamInfo); setTeamData(); adapter = new MyAdapter(teamList);
    RecyclerView.LayoutManager manager = new LinearLayoutManager(getApplicationContext());
    rvTeams.setLayoutManager(manager);
    rvTeams.setAdapter(adapter);
    } private void setTeamData() {
    FootballTeam team = new FootballTeam("Manchester United", "English Premier League", 1878);
    teamList.add(team); team = new FootballTeam("Arsenal", "English Premier League", 1886);
    teamList.add(team); team = new FootballTeam("Liverpool", "English Premier League", 1892);
    teamList.add(team); team = new FootballTeam("Juventus", "Serie A", 1897);
    teamList.add(team); team = new FootballTeam("Real Madrid", "La Liga", 1902);
    teamList.add(team); team = new FootballTeam("Bayern Munich", "Bundesliga", 1900);
    teamList.add(team); team = new FootballTeam("PSG", "France Ligue 1", 1970);
    teamList.add(team); team = new FootballTeam("Ajax", "Eredivisie", 1900);
    teamList.add(team);
    }
    }

在MainActivity.java文件中,我们创建了对Recycler视图的引用,并且我们还为Adapter和list创建了变量。我们已经使用该setTeamData()方法来填充我们ArrayList将要显示的数据RecyclerView。

在“ onCreate()”方法中,我们正在创建一个LinearLayoutManager并为我们分配相同的方法RecyclerView。在LayoutManager所使用的再循环器,以便在屏幕上每个单独的物品位置。我们习惯于LinearLayoutManager水平放置物品。其他类型的选项包括GridLayoutManager和StaggeredGridLayoutManager。如果需要,我们还可以创建自定义布局管理器。

设置布局管理器后,我们将自定义适配器分配给recycler视图。在运行应用程序时,您将看到List如下图所示的项目列表。您还可以滚动列表。RecyclerView还提供了指定动画的不同选项,或者onclick如果希望列表中的项目可单击并且您希望对列表项单击执行某些操作,则可以实现侦听器。

Android开发中如何使用RecyclerView的更多相关文章

  1. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  2. Android开发中常见的设计模式

    对于开发人员来说,设计模式有时候就是一道坎,但是设计模式又非常有用,过了这道坎,它可以让你水平提高一个档次.而在android开发中,必要的了解一些设计模式又是非常有必要的.对于想系统的学习设计模式的 ...

  3. Android学习探索之Java 8 在Android 开发中的应用

    前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...

  4. android开发中fragment获取context

    在用到fragment时无法使用.this来指定当前context内容,android开发中fragment获取context,可以使用getActivity().getApplicationCont ...

  5. java中的反射机制在Android开发中的用处

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...

  6. Android开发中的输入合法性检验

    Why ? 合法性检查对于程序的健壮性具有重要作用.在Android开发中,良好的合法性检查设计机制可以使程序更加清晰,产生bug更少,交互更加友好. What ? 合法性检查的目的在于确定边界.对于 ...

  7. 在android开发中使用multdex的方法-IT蓝豹为你整理

    Android系统在安装应用时,往往需要优化Dex,而由于处理工具DexOpt对id数目的限制,导致其处理的数目不能超过65536个,因此在Android开发中,需要使用到MultiDex来解决这个问 ...

  8. 怎样实现了捕获应用中的日志在android开发中

    怎样实现了捕获应用中的日志在android开发中,大家可研究一下. Process mLogcatProc = null; BufferedReader reader = null; try { mL ...

  9. Android开发中Eclispe相关问题及相应解决(持续更新)

    1.Eclipse项目中的Android Private Libraries没有自动生成. 一般而言,在Android开发中,项目中引用到的jar包会放到项目目录中的libs中,引入库会放到Andro ...

随机推荐

  1. 全面解密QQ红包技术方案:架构、技术实现、移动端优化、创新玩法等

    本文来自腾讯QQ技术团队工程师许灵锋.周海发的技术分享. 一.引言 自 2015 年春节以来,QQ 春节红包经历了企业红包(2015 年).刷一刷红包(2016 年)和 AR 红包(2017 年)几个 ...

  2. awk小例子_2_数值统计脚本

    通信公司工作,经常处理各种协议接口,在统计协议接口字段内容时,需要统计字段填写的内容是否正确,和占比是多少.要是单次统计,估计会把人累死,写个脚本统计,轻松便捷. 举例:接口内容 这是一条话单,这样的 ...

  3. iOS学习——(转)多线程

    转载自:iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用 一.多线程的基本概念 进程:可以理解成一个运行中的应用程序,是系统进行资源分配和 ...

  4. [Abp 源码分析]六、工作单元的实现

    0.简介 在 Abp 框架内部实现了工作单元,在这里讲解一下,什么是工作单元? Unit Of Work(工作单元)模式用来维护一个由已经被业务事物修改(增加.删除或更新)的业务对象组成的列表.Uni ...

  5. 厉害—Ansible管理windows集群

    最近公司新项目需要安装400+windows server 2012系统的工作站,想着怎么能像linux下运用ansible批量管理,linux就很简单了有ssh服务 但是下却没这么简单,但还是有办法 ...

  6. Python爬虫入门教程 4-100 美空网未登录图片爬取

    美空网未登录图片----简介 上一篇写的时间有点长了,接下来继续把美空网的爬虫写完,这套教程中编写的爬虫在实际的工作中可能并不能给你增加多少有价值的技术点,因为它只是一套入门的教程,老鸟你自动绕过就可 ...

  7. 补习系列(4)-springboot 参数校验详解

    目录 目标 一.PathVariable 校验 二.方法参数校验 三.表单对象校验 四.RequestBody 校验 五.自定义校验规则 六.异常拦截器 参考文档 目标 对于几种常见的入参方式,了解如 ...

  8. LeetCode专题-Python实现之第9题:Palindrome Number

    导航页-LeetCode专题-Python实现 相关代码已经上传到github:https://github.com/exploitht/leetcode-python 文中代码为了不动官网提供的初始 ...

  9. ES6躬行记(20)——类

    ES6正式将类(Class)的概念在语法层面标准化,今后不必再用构造函数模拟类的行为.而ES6引入的类本质上只是个语法糖(即代码更为简洁.语义更为清晰),其大部分功能(例如继承.封装和复用等)均可在E ...

  10. 3分钟学会如何调度运营海量Redis系统

    本文由云+社区发表 作者:冯伟源 作者:冯伟源,高级工程师,腾讯云Redis系统运维负责人.6年DBA经验,一直从事SQL优化.实例调优.数据库架构.海量数据库集群运维.运营平台建设和管理等工作.为 ...