目录

介绍

创建一个新项目

创建模型类和布局文件

创建适配器

主活动变化


  • 下载源代码

介绍

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

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

创建一个新项目

  1. 打开Android Studio。转到文件 ->“新建项目,填写应用程序名称和其他详细信息,选择API版本为API 15。选择空活动,在下一个屏幕中保留默认选项,然后单击完成。将创建新项目以及所需文件。(在示例中,我将应用程序名称指定为“ SimpleRecyclerViewExample”并将包装命名为“ com.example”
  2. 为了使用RecyclerView,我们需要添加recycleler视图依赖项。打开build.gradleModule:app文件,并在dependencies部分添加以下“’com.android.support:recyclerview-v7:26.1.0’实现”。单击立即同步以同步更改并构建项目。
  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.RecyclerViewandroid: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的布局文件。此布局将用于在recycler视图中显示每条记录。我们将创建一个包含三个文本视图的简单RelativeLayout视图,用于显示已建立的名称、联盟和年份。布局的完整XML如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayoutxmlns: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" ><TextViewandroid: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" /><TextViewandroid:id="@+id/tvLeague"android:layout_width="match_parent"android:layout_height="wrap_content"tools:text="Team League"android:layout_below="@id/tvName" /><TextViewandroid:id="@+id/tvYear"android:layout_width="wrap_content"android:layout_height="wrap_content"tools:text="1999"android:layout_alignParentRight="true"/></RelativeLayout>

对于这个例子,在XML中我直接对填充和textSize进行了硬编码,但在单独的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);}@Overridepublic 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()));}@Overridepublic int getItemCount() {return teamList.size();}
}

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

适配器负责根据需要创建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;@Overrideprotected 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()方法用将在RecyclerView中显示的数据来填充我们的ArrayList。

在“ onCreate()”方法中,我们正在创建一个LinearLayoutManager,并将其分配给RecyclerView。recycler视图使用LayoutManager在屏幕上定位每个项。我们习惯于使用LinearLayoutManager水平放置项。其他类型的选项包括GridLayoutManager和StaggeredGridLayoutManager。如果需要,我们还可以创建自定义布局管理器。

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

原文地址:https://www.codeproject.com/Articles/1275740/Using-RecyclerView-in-Android

在Android中使用RecyclerView相关推荐

  1. android自定义起止时间的时间刻度尺,Android中自定义RecyclerView如何实现不固定刻度的刻度尺...

    Android中自定义RecyclerView如何实现不固定刻度的刻度尺 发布时间:2020-07-17 16:50:28 来源:亿速云 阅读:116 作者:小猪 这篇文章主要讲解了Android中自 ...

  2. Android中设置RecyclerView的每一个item的单项点击事件

    场景 Android中使用Adapter(适配器)给RecycleView设置数据源: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detail ...

  3. android 弹出网格菜单,在android中的recyclerView中显示弹出按钮的确...

    as per my above comment可以使用Popup Menu Android Popup Menu displays the menu below the anchor text if ...

  4. Android中RecyclerView嵌套RecyclerView或嵌套ListView

    Android中RecyclerView嵌套RecyclerView或嵌套ListView

  5. Android Studio中引入RecyclerView的v7包

    本文转载自[http://blog.csdn.net/a10615/article/details/51268022] 一直知道RecyclerView可以代替ListView.GridView使用, ...

  6. android listview 滑动条显示_第七十六回:Android中UI控件之RecyclerView基础

    各位看官们,大家好,上一回中咱们说的是Android中UI控件之ListView优化的例子,这一回咱们说的例子是UI控件之RecyclerView.闲话休提,言归正转.让我们一起Talk Androi ...

  7. Android中当item数量超过一定大小RecyclerView高度固定

    Android中当item数量超过一定大小时,将RecyclerView高度固定 方法1 直接通过LayoutParams来设定相应高度 ViewGroup.LayoutParams lp = rv. ...

  8. Android Studio中的RecyclerView的使用方法实例分析

    RecyclerView的使用方法实例分析 话不多说直接上代码 主文件的布局文件,定义一个RecyclerView列表 <?xml version="1.0" encodin ...

  9. Android中RecyclerView点击item展开列表详细内容(超简单实现)

    请注明出处: http://blog.csdn.net/qq_23179075/article/details/79230457 Android中RecyclerView点击item展开列表详细内容( ...

最新文章

  1. 程序设计第三次作业附加 代码规范
  2. python2和python3同时存在如何使用pip
  3. windows server 2012 添加中文语言包(英文转为中文)(离线)
  4. Hadoop赠品–综述
  5. 利用SQL语句自动生成序号的两种方式
  6. android 调用wcf json,使用 JSONP
  7. 消耗性缺口_衰竭缺口分析
  8. mysql 添加添加事务处理
  9. 后缀的形容词_4.1.3后缀or形容词比较级【p78】
  10. 网络编程中udp,tcp.客户端,和服务器端。运用到的软件,串口调试助手 NetAssist
  11. html手机编辑器新手,HTML 编辑器
  12. 在OpenLava中探索Fairshare调度
  13. 压缩图片大小至指定Kb以下
  14. 李烨_敏捷团队中QA角色的转变
  15. FOMO3D的超万倍奖金,自导自演or黑天鹅事件?
  16. layui框架下拉选择树性图(转载)
  17. 焊接心得(2016.8.30)
  18. 【小家java】java9新特性(简述十大新特性) 褒贬不一
  19. 大地坐标系(WGS84)转空间直角坐标系(笛卡尔坐标系XYZ)
  20. Java获取请求头、参数、路径、

热门文章

  1. jquery 毫秒转换成日期_jquery js 秒 毫秒转时分秒
  2. 正能量励志文字手机壁纸
  3. 小雪节气艺术字体设计PNG素材 | 希望可以温暖到你了
  4. 清新手绘水果平面设计|面膜的包装设计越来越精致了!
  5. Sketch vs. Figma vs. adobe xd:哪个设计工具最适合初学者?
  6. JDBC的DML增删改查的代码重构设计(上)
  7. System-Level Registers and Data Structures in IA-32e Mode and 4-Level Paging
  8. 【GitHub】Linux 内核揭秘:linux-insides-zh
  9. I2C总线 | 百度百科
  10. 介绍Calico eBPF数据平面:Linux内核网络、安全性和跟踪(Kubernetes、kube-proxy)