[Android]下拉刷新和上拉加载更多

示意图:

 

1.添加依赖

  • SwipeRefreshLayout 是一个支持下拉刷新功能的布局,它是 Android Support Library 或 AndroidX 库的一部分。

  • BaseQuickAdapter 是一个来自开源库 BRVAH (Base RecyclerView Adapter Helper) 的功能丰富的适配器,用于简化 RecyclerView 的适配器实现。

dependencies {
    implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
    implementation("com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.6")
}

2.布局文件

在你的布局文件中(例如 activity_main.xml),你需要有一个 RecyclerView 和一个 SwipeRefreshLayout:

<?xml version="1.0" encoding="utf-8"?>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/swipe_refresh_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

3.Activity 代码

在你的 Activity 中,设置下拉刷新和上拉加载更多:

import android.os.Bundle
import android.os.Handler
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.listener.OnLoadMoreListener
import com.chad.library.adapter.base.viewholder.BaseViewHolder

class MainActivity : AppCompatActivity() {

    private lateinit var swipeRefreshLayout: SwipeRefreshLayout
    private lateinit var recyclerView: RecyclerView
    private lateinit var adapter: MyAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        swipeRefreshLayout = findViewById(R.id.swipe_refresh_layout)
        recyclerView = findViewById(R.id.recycler_view)

        adapter = MyAdapter()
        recyclerView.adapter = adapter
        recyclerView.layoutManager = LinearLayoutManager(this)

        swipeRefreshLayout.setOnRefreshListener {
            // 处理刷新
            Handler().postDelayed({
                swipeRefreshLayout.isRefreshing = false
                adapter.setNewInstance(listOf("New Item 1", "New Item 2", "New Item 3"))
            }, 2000)
        }

        adapter.loadMoreModule.setOnLoadMoreListener {
            // 处理加载更多
            Handler().postDelayed({
                adapter.addData(listOf("More data 1", "More data 2"))
                adapter.loadMoreModule.loadMoreComplete()
            }, 2000)
        }

        // 可选: 自定义LoadMoreView
        adapter.loadMoreModule.loadMoreView = CustomLoadMoreView()
    }
}

class MyAdapter : BaseQuickAdapter<String, BaseViewHolder>(android.R.layout.simple_list_item_1) {
    override fun convert(holder: BaseViewHolder, item: String) {
        holder.setText(android.R.id.text1, item)
    }
}

4.自定义 LoadMoreView

package com.mofang.call.callphone.view

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import com.chad.library.adapter.base.loadmore.BaseLoadMoreView
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.mofang.call.callphone.R

class CustomLoadMoreView : BaseLoadMoreView() {
    override fun getRootView(parent: ViewGroup): View {
        return LayoutInflater.from(parent.context).inflate(R.layout.costom_load_more_view, parent, false)
    }

    override fun getLoadingView(holder: BaseViewHolder): View {
        return holder.getView(R.id.loading_v)
    }

    override fun getLoadComplete(holder: BaseViewHolder): View {
        return getLoadEndView(holder)
    }

    override fun getLoadFailView(holder: BaseViewHolder): View {
        val textView = holder.getView<TextView>(R.id.load_more_text)
        textView.text = "加载失败,请重试"
        return textView
    }

    override fun getLoadEndView(holder: BaseViewHolder): View {
        val textView = holder.getView<TextView>(R.id.load_more_text)
        textView.text = "没有更多数据"
        return textView
    }

}

custom_load_more.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:gravity="center">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <LinearLayout
            android:id="@+id/loading_v"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <ProgressBar
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:layout_gravity="center_vertical"
                android:indeterminateTint="#FFFFFF" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_marginStart="10dp"
                android:gravity="center_vertical"
                android:text="正在加载中..."
                android:textColor="#FFFFFFFF"
                android:textSize="16sp" />
        </LinearLayout>

        <TextView
            android:id="@+id/load_more_text"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginStart="10dp"
            android:gravity="center_vertical"
            android:text="正在加载中..."
            android:textColor="#FFFFFFFF"
            android:textSize="16sp" />

    </LinearLayout>

</RelativeLayout>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于机器学习的一线城市租房价格预测分析与实现,实现三种算法预测

本文旨在基于机器学习方法&#xff0c;对一线城市租房价格进行预测分析&#xff0c;并使用Matplotlib可视化、随机森林、一元线性回归和多元线性模型进行模型对比。通过爬取北京链家二手房数据作为研究对象&#xff0c;探讨了租房价格与各种因素之间的关系&#xff0c;阐述了研…

【数据库基础-mysql详解之索引的魅力(N叉树)】

索引的魅力目录 &#x1f308;索引的概念&#x1f308;使用场景&#x1f308;索引的使用&#x1f31e;&#x1f31e;&#x1f31e;查看MySQL中的默认索引&#x1f31e;&#x1f31e;&#x1f31e;创建索引&#x1f31e;&#x1f31e;&#x1f31e;删除索引 站在索引背后的那个男…

Java时间类--JDK7

一、Date类 1.引言 全世界的时间&#xff0c;有一个统计的计算标准。 1884年&#xff0c;将英国格林威治时间认为是世界标准时间。 在2012年1月份后&#xff0c;由于误差太大&#xff0c;最高可达16min。 取消使用了近130年的格林威治时间&#xff0c;改用原子钟作为世界标…

Mistral AI 团队发布 Mistral-7B-Instruct-v0.3

抱抱脸上线了 Mistral-7B-v0.3 的基础版和指令微调版。 相比于Mistral-7B-v0.2&#xff0c;新版本更新如下&#xff1a; – 词汇量从 32000 扩展到 32768 – 支持 v3 分词器 – 支持函数调用 Mistral-7B-v0.3&#xff1a;网页链接 Mistral-7B-Instruct-v0.3&#xff1a;网页…

vue项目打包教程

如果是用 vue-cli 创建的项目&#xff0c;则项目目录中没有 config 文件夹&#xff0c;所以我们需要自建一个配置文件&#xff1b;在vue项目目录下创建文件 vue.config.js&#xff0c;需注意文件名称必须是 vue.config.js&#xff0c;然后在文件中插入以下代码&#xff1a; 文件…

Wireshark 搜不到字符串?

一个原因是pcap里没有这个字符串&#xff0c; 另一个原因可能是ctrlF之后&#xff0c;选择搜索的地方不对&#xff0c;或者是编码方式选择的不对。 上面图片的第一个下拉框是要搜索的一个范围&#xff0c;是在哪一个panel搜索&#xff0c;范围说明在下面这个链接有详细说明&…

数据结构:树(3)【二叉树链式结构实现】【二叉树的前序,中序,后序遍历】【求二叉树全部结点个数】【求二叉树叶子结点个数】【求二叉树的深度】【单值二叉树】

一.二叉树链式结构的实现 二叉树的链式结构的实现相对于顺序结构的实现就没有那么多的讲究了。就是普通的链表&#xff0c;只不过多了一个指向的指针。 具体结构如下&#xff1a; typedef int BTDataType; typedef struct BinaryTreeNode {BTDataType data;struct BinaryTre…

ASP+ACCESS客户管理信息系统

摘要 本文介绍了客户管理系统的实现方法。目的在于让大家共享学习和运用这一语言的体会和收获。本系统是Internet/Intranet环境下面向电子商务的客户管理&#xff0c;通过企业管理技术、电子商务和信息技术的高度集成&#xff0c;讨论了客户管理系统的系统构架、系统的工作…

深入理解python列表与字典:数据结构的选择与性能差异

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、列表与字典&#xff1a;基础数据结构的对比 二、列表&#xff1a;逐个遍历的查找方式 …

面试题·栈和队列的相互实现·详解

A. 用队列实现栈 用队列实现栈 实现代码如下 看着是队列&#xff0c;其实实际实现更接近数组模拟 typedef struct {int* queue1; // 第一个队列int* queue2; // 第二个队列int size; // 栈的大小int front1, rear1, front2, rear2; // 两个队列的首尾指针 } MyS…

生成式AI导论2024-李宏毅

生成式AI导论2024-李宏毅 第0讲&#xff1a; 课程说明第1讲&#xff1a;生成式AI是什么第2講&#xff1a;今日的生成式人工智慧厲害在哪裡&#xff1f;從「工具」變為「工具人」 第0讲&#xff1a; 课程说明 生成式AI的入门课程 第1讲&#xff1a;生成式AI是什么 生成式人…

【机器学习】基于核的机器学习算法(Kernel-based Algorithms):原理,应用与优化

&#x1f440;传送门&#x1f440; 文章引言&#x1f50d;&#x1f340;核函数的概念&#x1f680;基于核的算法原理&#x1f496;基于核的算法应用&#x1f41f;支持向量机&#xff08;SVM&#xff09;&#x1f4d5;核主成分分析&#xff08;KPCA&#xff09; &#x1f340;未…

Leetcode42题:接雨水

1.题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,…

ES的安装以及配置+ik分词

环境&#xff1a;windows10、ES&#xff08;8.13.3&#xff09;、Kibana&#xff08;8.13.3&#xff09;、Logstash&#xff08;8.13.3&#xff09;、ik&#xff08;8.13.3&#xff09; 1.下载安装ES Download Elasticsearch | ElasticDownload Elasticsearch or the complet…

基于物联网架构的电子小票服务系统

1.电子小票物联网架构 采用感知层、网络层和应用层的3层物联网体系架构模型&#xff0c;电子小票物联网的架构见图1。 图1 电子小票物联网架构 感知层的小票智能硬件能够取代传统的小票打印机&#xff0c;在不改变商家原有收银系统的前提下&#xff0c;采集收音机待打印的购物…

图像处理ASIC设计方法 笔记24 等价表和标记代换

(一)等价表的整理与压缩 1.1 等价关系的识别与追踪 在初步标记过程完成后,等价表的整理和压缩变得至关重要。这一阶段的首要任务是从等价表的地址1开始,对等价表进行逐个扫描。在扫描过程中,系统将检查每个临时标记是否存在等价关系。若发现等价关系,系统将执行追踪过程,…

用c++用4个凸函数(觉得啥好用用啥)去测试adam,rmsprop,adagrad算法的性能(谁先找到最优点)

为了测试 Adam、RMSProp 和 Adagrad 算法的性能&#xff0c;你可以使用四个凸函数进行实验。以下是一些常用的凸函数示例&#xff1a; Rosenbrock 函数&#xff1a; Booth 函数&#xff1a; Himmelblau 函数&#xff1a; Beale 函数&#xff1a; 你可以选择其中一个或多…

企业活动想找媒体报道宣传怎样联系媒体?

在那遥远的公关江湖里,有一个传说,说的是一位勇士,手持鼠标和键盘,踏上了寻找媒体圣杯的征途。这位勇士,就是我们亲爱的市场部门小李,他的任务是为公司即将举行的一场盛大的企业活动找到媒体的聚光灯。 小李的故事,开始于一张空白的Excel表格,上面列着各大媒体的名称,旁边是一片…

4. C++网络编程-TCP客户端的实现

TCP Client网络编程基本步骤 创建socket&#xff0c;指定使用TCP协议使用connect连接服务器使用recv/send接收/发送数据关闭socket TCP-connect连接请求 !man 2 connect #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> int connect(int sock…