许多应用都会以列表的形式展示大量的数据。由于数据量巨大,我们无法一次性加载所有内容。如果我们试图一次性加载所有数据,不仅会耗费很长的加载时间,还会降低 RecyclerView 的性能。为了解决这个问题,我们通常将数据分块加载并分批展示。在本文中,我们将探讨如何通过在底部显示一个 ProgressBar 来实现这种无限滚动列表的数据加载。
我们将在本文中构建什么?
我们将构建一个简单的应用,其中包含一个无限列表。当用户滚动到底部时,我们会借助下方的 ProgressBar 来加载更多数据。我们将调用同一个方法向 ArrayList 中添加数据。下面提供了一个示例 GIF,帮助大家了解我们要实现的效果。请注意,我们将使用 Java 语言来实现这个项目。
分步实现
第 1 步:创建一个新项目
要在 Android Studio 中创建新项目,请参考 如何在 Android Studio 中创建/启动新项目。请注意选择 Java 作为编程语言。
第 2 步:在 build.gradle 文件中添加以下依赖并在 Manifest 文件中允许网络权限
以下是 Volley 的依赖项,我们将使用它从 API 获取数据。要添加此依赖,请导航到 app > Gradle Scripts > build.gradle(app),并在 dependencies 部分添加以下依赖。我们还使用了 Picasso 依赖来从 URL 加载图片。
// below line is used for volley library
implementation com.android.volley:volley:1.1.1‘
// below line is used for image loading library
implementation com.squareup.picasso:picasso:2.71828‘
在 Manifests 文件中添加网络权限。
第 3 步:修改 activity_main.xml 文件
导航至 app > res > layout > activitymain.xml,并将以下代码添加到该文件中。以下是 activitymain.xml 文件的代码。
XML
CODEBLOCK_ae2c2d86
第 4 步:创建 Modal 类
导航至 app > java > 你的应用包名 > 右键点击 > New > Java class,将其命名为 CourseModal 并添加以下代码。
Java
`
public class CourseModal {
// variables for our course name,
// description and duration.
private String courseName;
private String courseModes;
private String courseTracks;
private String courseImg;
// constructor class.
public CourseModal(String courseName, String courseModes, String courseTracks, String courseImg) {
this.courseName = courseName;
this.courseModes = courseModes;
this.courseTracks = courseTracks;
this.courseImg = courseImg;
}
// getter and setter methods.
public String getCourseImg() {
return courseImg;
}
public void setCourseImg(String courseImg) {
this.courseImg = courseImg;
}
public String getCourseName() {
return courseName;
}
public void setCourseName(String courseName) {
this.courseName = courseName;
}
public String getcourseModes() {
return courseModes;
}
public void setcourseModes(String courseModes) {
this.courseModes = courseModes;
}
public String getcourseTracks() {
return courseTracks;
}
public void setcourseTracks(String courseTracks) {