Android开发中如何使用RecyclerView

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

介绍

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

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

建立一个新项目

  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和建立变量NameLeagueYearEstablished
    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”属性来了解个人布局在设计器中的外观。运行应用程序时不会呈现相同的内容。app

建立适配器

如今咱们已经建立了Model项目布局,如今是时候建立咱们的adapter类了。adapter班是负责建立ViewHolder对象和数据绑定到他们。ide

  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在适配器中定义了类,并TextViewViewHolder构造函数中初始化了函数

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

“ onCreateViewHolder()”方法用于建立ViewHolder,咱们正在膨胀咱们以前在其中建立的布局。性能

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

“ 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并为咱们分配相同的方法RecyclerViewLayoutManager所使用的再循环器,以便在屏幕上每一个单独的物品位置。咱们习惯于LinearLayoutManager水平放置物品。其余类型的选项包括GridLayoutManagerStaggeredGridLayoutManager若是须要,咱们还能够建立自定义布局管理器。

设置布局管理器后,咱们将自定义适配器分配给recycler视图。在运行应用程序时,您将看到List以下图所示的项目列表您还能够滚动列表。RecyclerView还提供了指定动画的不一样选项,或者onclick若是但愿列表中的项目可单击而且您但愿对列表项单击执行某些操做,则能够实现侦听器。

如何在Android中使用RecyclerView

相关文章
相关标签/搜索