XRecyclerView实现下拉刷新、滚动到底部加载更多等功能
发布时间 - 2026-01-11 02:35:47 点击率:次介绍:

一个实现了下拉刷新,滚动到底部加载更多以及添加header功能的的RecyclerView。使用方式和RecyclerView完全一致,不需要额外的layout,不需要写特殊的adater。 加载效果内置了AVLoadingIndicatorView上的所有效果,可以根据需要指定。
项目地址:https://github.com/jianghejie/XRecyclerView
效果:
使用:
xml
<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="match_parent" tools:context=".MainActivity"> <com.jcodecraeer.xrecyclerview.XRecyclerView android:id="@+id/recyclerview" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </RelativeLayout>
2.MainActivity
package com.example.xrecyclerview;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import com.jcodecraeer.xrecyclerview.ProgressStyle;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private XRecyclerView mRecyclerView;
private MyAdapter mAdapter;
private ArrayList<String> listData;
private int refreshTime = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (XRecyclerView)this.findViewById(R.id.recyclerview);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.setRefreshProgressStyle(ProgressStyle.BallSpinFadeLoader);
mRecyclerView.setLaodingMoreProgressStyle(ProgressStyle.Pacman);
mRecyclerView.setArrowImageView(R.drawable.iconfont_downgrey);
View header = LayoutInflater.from(this).inflate(R.layout.recyclerview_header, (ViewGroup)findViewById(android.R.id.content),false);
mRecyclerView.addHeaderView(header);
mRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
refreshTime ++;
new Handler().postDelayed(new Runnable(){
public void run() {
listData.clear();
for(int i = 0; i < 15 ;i++){
listData.add("item" + i + "after " + refreshTime + " times of refresh");
}
mAdapter.notifyDataSetChanged();
mRecyclerView.refreshComplete();
}
}, 3000); //refresh data here
}
@Override
public void onLoadMore() {
new Handler().postDelayed(new Runnable(){
public void run() {
for(int i = 0; i < 15 ;i++){
listData.add("item" + (i + listData.size()) );
}
mAdapter.notifyDataSetChanged();
mRecyclerView.loadMoreComplete();
}
}, 3000);
}
});
listData = new ArrayList<String>();
mAdapter = new MyAdapter(listData);
for(int i = 0; i < 15 ;i++){
listData.add("item" + i);
}
mRecyclerView.setAdapter(mAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
3. adapter
package com.example.xrecyclerview;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
/**
* Created by jianghejie on 15/11/26.
*/
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
public ArrayList<String> datas = null;
public MyAdapter(ArrayList<String> datas) {
this.datas = datas;
}
//创建新View,被LayoutManager所调用
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item,viewGroup,false);
ViewHolder vh = new ViewHolder(view);
return vh;
}
//将数据与界面进行绑定的操作
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
viewHolder.mTextView.setText(datas.get(position));
}
//获取数据的数量
@Override
public int getItemCount() {
return datas.size();
}
//自定义的ViewHolder,持有每个Item的的所有界面元素
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView mTextView;
public ViewHolder(View view){
super(view);
mTextView = (TextView) view.findViewById(R.id.text);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# XRecyclerView
# 下拉刷新
# 滚动加载
# Android中使用RecyclerView实现下拉刷新和上拉加载
# Android RecyclerView实现下拉刷新和上拉加载
# Android RecyclerView 上拉加载更多及下拉刷新功能的实现方法
# 详解Recyclerview item中有EditText使用刷新遇到的坑
# Android使用recyclerview打造真正的下拉刷新上拉加载效果
# android RecyclerView侧滑菜单
# 滑动删除
# 长按拖拽
# 下拉刷新上拉加载
# Android使用RecyclerView实现自定义列表、点击事件以及下拉刷新
# Android RecyclerView的刷新分页的实现
# Android RecyclerView下拉刷新和上拉加载更多
# RecyclerView使用payload实现局部刷新
# 加载
# 不需要
# 自定义
# 不需
# 可以根据
# 绑定
# 大家多多
# 要写
# 实现了
# 内置了
# Menu
# MenuItem
# LayoutInflater
# view
# LinearLayoutManager
# ProgressStyle
# util
# ViewGroup
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Bootstrap CSS布局之列表
JavaScript如何实现倒计时_时间函数如何精确控制
Linux系统命令中tree命令详解
javascript基于原型链的继承及call和apply函数用法分析
Laravel如何配置任务调度?(Cron Job示例)
如何在服务器上配置二级域名建站?
Android利用动画实现背景逐渐变暗
Laravel Docker环境搭建教程_Laravel Sail使用指南
如何在IIS7上新建站点并设置安全权限?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
Laravel模型事件有哪些_Laravel Model Event生命周期详解
微信小程序 scroll-view组件实现列表页实例代码
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
在centOS 7安装mysql 5.7的详细教程
利用python获取某年中每个月的第一天和最后一天
EditPlus 正则表达式 实战(3)
常州企业网站制作公司,全国继续教育网怎么登录?
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
Laravel如何创建自定义Artisan命令?(代码示例)
如何在宝塔面板中修改默认建站目录?
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
如何在IIS中配置站点IP、端口及主机头?
Windows Hello人脸识别突然无法使用
node.js报错:Cannot find module 'ejs'的解决办法
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
Laravel Session怎么存储_Laravel Session驱动配置详解
如何在阿里云高效完成企业建站全流程?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
如何在万网自助建站平台快速创建网站?
如何快速搭建高效香港服务器网站?
音乐网站服务器如何优化API响应速度?
如何用JavaScript实现文本编辑器_光标和选区怎么处理
java中使用zxing批量生成二维码立牌
Python图片处理进阶教程_Pillow滤镜与图像增强
如何获取免费开源的自助建站系统源码?
PHP 500报错的快速解决方法
javascript中闭包概念与用法深入理解
如何在云主机快速搭建网站站点?
北京专业网站制作设计师招聘,北京白云观官方网站?
微信小程序 canvas开发实例及注意事项
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
Laravel怎么实现模型属性的自动加密
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
独立制作一个网站多少钱,建立网站需要花多少钱?
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
怎么用AI帮你设计一套个性化的手机App图标?

