当前位置: 首页 > news >正文

建设品牌型网站网站整体规划

建设品牌型网站,网站整体规划,滨州内做网站的公司,杭州最大的网站开发在 Android 开发中,列表页面是常见的 UI 设计模式,而下拉刷新和加载更多是提升用户体验的关键功能。本文将带你从零开始,封装一个高复用性的 SmartRefreshHelper 工具类,结合 SmartRefreshLayout 和 BRVAH,实现高效、灵…

在 Android 开发中,列表页面是常见的 UI 设计模式,而下拉刷新和加载更多是提升用户体验的关键功能。本文将带你从零开始,封装一个高复用性的 SmartRefreshHelper 工具类,结合 SmartRefreshLayoutBRVAH,实现高效、灵活的列表页面。你将学到:

  • 如何封装 SmartRefreshHelper 工具类,简化列表页面的实现。
  • 支持下拉刷新、加载更多、空布局和加载更多失败处理。
  • 通过代码示例和布局文件,快速上手并应用到实际项目中。

包括 SmartRefreshLayoutBRVAH 的封装下拉刷新和加载更多功能空布局支持加载更多失败处理 以及 网络请求封装。所有内容都经过优化,确保代码简洁、高效且易于扩展。


1. 添加依赖

build.gradle 中添加以下依赖:

dependencies {// SmartRefreshLayout 下拉刷新和加载更多implementation 'io.github.scwang90:refresh-layout-kernel:2.0.6' // 核心库implementation 'io.github.scwang90:refresh-header-classics:2.0.6' // 经典刷新头implementation 'io.github.scwang90:refresh-footer-classics:2.0.6' // 经典加载更多// BRVAH 高效适配器implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.14'
}

2. 布局文件

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<com.scwang.smart.refresh.layout.SmartRefreshLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/refreshLayout"android:layout_width="match_parent"android:layout_height="match_parent"><!-- RecyclerView --><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/recyclerView"android:layout_width="match_parent"android:layout_height="match_parent"/></com.scwang.smart.refresh.layout.SmartRefreshLayout>
item_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:padding="16dp"><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Item"android:textSize="18sp"/>
</LinearLayout>
empty_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:gravity="center"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="No data available"android:textSize="18sp"/>
</LinearLayout>

3. 封装 SmartRefreshHelper 工具类

import android.app.Activity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.scwang.smart.refresh.layout.api.RefreshLayout;
import com.scwang.smart.refresh.layout.listener.OnLoadMoreListener;
import com.scwang.smart.refresh.layout.listener.OnRefreshListener;
import java.util.List;/*** 封装 SmartRefreshLayout 和 BRVAH 的工具类* 功能:支持下拉刷新、加载更多、空布局和加载更多失败处理*/
public class SmartRefreshHelper<T> {private final Activity activity;private final RefreshLayout refreshLayout;private final RecyclerView recyclerView;private final BaseQuickAdapter<T, ?> adapter;private final DataLoader<T> dataLoader;private int page = 1; // 当前页码/*** 构造函数** @param activity         Activity 实例* @param refreshLayoutId  SmartRefreshLayout 的 ID* @param recyclerViewId   RecyclerView 的 ID* @param adapter          数据适配器* @param dataLoader       数据加载器*/public SmartRefreshHelper(Activity activity, int refreshLayoutId, int recyclerViewId,BaseQuickAdapter<T, ?> adapter, DataLoader<T> dataLoader) {this.activity = activity;this.refreshLayout = activity.findViewById(refreshLayoutId);this.recyclerView = activity.findViewById(recyclerViewId);this.adapter = adapter;this.dataLoader = dataLoader;// 初始化 RecyclerViewrecyclerView.setLayoutManager(new LinearLayoutManager(activity));recyclerView.setAdapter(adapter);// 设置下拉刷新和加载更多监听器initRefreshListener();}/*** 初始化下拉刷新和加载更多监听器*/private void initRefreshListener() {// 下拉刷新refreshLayout.setOnRefreshListener((RefreshLayout refreshLayout) -> {page = 1; // 重置页码loadData(page, true); // 加载第一页数据});// 加载更多refreshLayout.setOnLoadMoreListener((RefreshLayout refreshLayout) -> {page++; // 加载下一页loadData(page, false);});}/*** 加载数据** @param page     当前页码* @param isRefresh 是否是刷新操作*/private void loadData(int page, boolean isRefresh) {dataLoader.loadData(page, new DataLoader.Callback<T>() {@Overridepublic void onSuccess(List<T> data) {if (isRefresh) {adapter.setList(data); // 刷新数据refreshLayout.finishRefresh(); // 结束刷新} else {adapter.addData(data); // 添加更多数据refreshLayout.finishLoadMore(); // 结束加载更多}}@Overridepublic void onFailure(String message) {if (isRefresh) {refreshLayout.finishRefresh(false); // 刷新失败} else {refreshLayout.finishLoadMore(false); // 加载更多失败}}});}/*** 设置空布局** @param emptyLayoutId 空布局的资源 ID*/public void setEmptyView(int emptyLayoutId) {adapter.setEmptyView(emptyLayoutId);}/*** 数据加载器接口*/public interface DataLoader<T> {void loadData(int page, Callback<T> callback);interface Callback<T> {void onSuccess(List<T> data);void onFailure(String message);}}
}

4. 适配器实现

MyAdapter
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import java.util.List;public class MyAdapter extends BaseQuickAdapter<String, BaseViewHolder> {public MyAdapter(List<String> data) {super(R.layout.item_layout, data);}@Overrideprotected void convert(@NonNull BaseViewHolder holder, String item) {// 绑定数据到视图holder.setText(R.id.textView, item);}
}

5. 在 Activity 中使用

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {private SmartRefreshHelper<String> smartRefreshHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 初始化适配器MyAdapter adapter = new MyAdapter(new ArrayList<>());// 初始化 SmartRefreshHelpersmartRefreshHelper = new SmartRefreshHelper<>(this,R.id.refreshLayout,R.id.recyclerView,adapter,new SmartRefreshHelper.DataLoader<String>() {@Overridepublic void loadData(int page, SmartRefreshHelper.DataLoader.Callback<String> callback) {// 模拟网络请求new Handler().postDelayed(() -> {List<String> data = getData(page); // 获取数据if (data.isEmpty()) {callback.onFailure("No more data"); // 加载失败} else {callback.onSuccess(data); // 加载成功}}, 2000); // 2秒延迟}});// 设置空布局smartRefreshHelper.setEmptyView(R.layout.empty_layout);// 首次加载数据smartRefreshHelper.loadData(1, true);}/*** 模拟获取数据** @param page 当前页码* @return 数据列表*/private List<String> getData(int page) {List<String> data = new ArrayList<>();for (int i = 0; i < 10; i++) {data.add("Item " + (page * 10 + i));}return data;}
}

6. 优势

  1. 空布局支持:当数据为空时显示提示。
  2. 加载更多失败处理:提升用户体验。
  3. 网络请求封装:通过 DataLoader 接口解耦网络请求逻辑。
  4. 代码复用性优化:通过泛型支持多种数据类型。
  5. 简洁高效:逻辑清晰,易于维护和扩展。

7. 总结

通过优化后的 SmartRefreshHelper,我们实现了一个功能强大且灵活的列表页面,支持下拉刷新、加载更多、空布局和加载更多失败处理。这种封装方式不仅提高了代码的复用性,还简化了开发流程。

核心功能
  • 下拉刷新:重置数据并加载第一页。
  • 加载更多:追加数据并加载下一页。
  • 空布局:当数据为空时显示提示。
  • 加载更多失败处理:提升用户体验。
扩展功能
  • 自定义刷新头和加载更多:满足个性化需求。
  • 支持多种数据类型:通过泛型实现。
http://www.dtcms.com/a/542416.html

相关文章:

  • 沈阳网站推广运营公司百度推广怎么做步骤
  • 网站免费大全wordpress 谷歌
  • Vite信息泄露 | CVE-2025-46565 复现研究
  • 将火山云TOS存储桶挂载到Linux服务器
  • 网站模板上传什么网站可以做数据调查
  • MongoDB数据库
  • 每天学英语(一)积极向上科技——东方仙盟炼气期
  • 织梦网站上传路径不对揭阳网站设计制作
  • 外贸网站建设 杭州网站建设都包括哪些方面
  • iis网站属性没有asp.net静态页面是什么意思
  • C++ 模板进阶
  • 怎么设置网站栏目百度推广营销
  • 国产MCU芯片在船舶压力传感器中的应用探索与实践
  • 关于网站建设的软文做球球棒棒糖网站源码
  • 网站开发教程pdf网络销售
  • 网站图片上传却不显示不出来亳州网站网站建设
  • 工商网站备案办法深圳 网站托管
  • 【元器件专题】电容核心知识-无极性电容(二)
  • progen2 docker镜像打包命令文档
  • 陇南市城乡建设局网站佛山网站建设 合优
  • 门户网站推广方案台州品牌设计公司
  • 临沧市住房和城乡建设局网站类模板模板下载网站有哪些
  • 网站备案幕布要求广西柳州网站建设
  • 广西住房与城乡建设部网站在线探测网站开发语言
  • 余姚市住房和城乡建设局网站网站优化推广哪家好
  • 稍微写了个屏保(GXDE 一言屏保)
  • 广州h5网站建设公司wordpress 100万数据
  • 【工具】llama factory默认的optimizer
  • (论文速读)HVI:一种用于弱光图像增强的新色彩空间
  • 随笔|富在术数,不在劳身