介绍:

一个实现了下拉刷新,滚动到底部加载更多以及添加header功能的的RecyclerView。使用方式和RecyclerView完全一致,不需要额外的layout,不需要写特殊的adater。 加载效果内置了AVLoadingIndicatorView上的所有效果,可以根据需要指定。

项目地址:https://github.com/jianghejie/XRecyclerView

效果:

使用:

  1. xml

01.<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
02.xmlns:tools="http://schemas.android.com/tools"
03.android:layout_width="match_parent"
04.android:layout_height="match_parent"
05.tools:context=".MainActivity">
06. 
07.<com.jcodecraeer.xrecyclerview.XRecyclerView
08.android:id="@+id/recyclerview"
09.android:layout_width="fill_parent"
10.android:layout_height="fill_parent" />
11. 
12.</RelativeLayout>

2.MainActivity

001.package com.example.xrecyclerview;
002. 
003.import android.os.Bundle;
004.import android.os.Handler;
005.import android.support.v7.app.AppCompatActivity;
006.import android.support.v7.widget.LinearLayoutManager;
007.import android.view.LayoutInflater;
008.import android.view.Menu;
009.import android.view.MenuItem;
010.import android.view.View;
011.import android.view.ViewGroup;
012. 
013.import com.jcodecraeer.xrecyclerview.ProgressStyle;
014.import com.jcodecraeer.xrecyclerview.XRecyclerView;
015. 
016.import java.util.ArrayList;
017. 
018.public class MainActivity extends AppCompatActivity {
019.private XRecyclerView mRecyclerView;
020.private MyAdapter mAdapter;
021.private ArrayList<String> listData;
022.private int refreshTime = 0;
023.@Override
024.protected void onCreate(Bundle savedInstanceState) {
025.super.onCreate(savedInstanceState);
026.setContentView(R.layout.activity_main);
027.mRecyclerView = (XRecyclerView)this.findViewById(R.id.recyclerview);
028.LinearLayoutManager layoutManager = new LinearLayoutManager(this);
029.layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
030.mRecyclerView.setLayoutManager(layoutManager);
031. 
032.mRecyclerView.setRefreshProgressStyle(ProgressStyle.BallSpinFadeLoader);
033.mRecyclerView.setLaodingMoreProgressStyle(ProgressStyle.Pacman);
034.mRecyclerView.setArrowImageView(R.drawable.iconfont_downgrey);
035. 
036.View header =   LayoutInflater.from(this).inflate(R.layout.recyclerview_header, (ViewGroup)findViewById(android.R.id.content),false);
037.mRecyclerView.addHeaderView(header);
038. 
039. 
040.mRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
041.@Override
042.public void onRefresh() {
043.refreshTime ++;
044.new Handler().postDelayed(new Runnable(){
045.public void run() {
046.listData.clear();
047.for(int i = 0; i < 15 ;i++){
048.listData.add("item" + i + "after " + refreshTime + " times of refresh");
049.}
050.mAdapter.notifyDataSetChanged();
051.mRecyclerView.refreshComplete();
052.}
053. 
054.}, 3000);            //refresh data here
055.}
056. 
057.@Override
058.public void onLoadMore() {
059.new Handler().postDelayed(new Runnable(){
060.public void run() {
061.for(int i = 0; i < 15 ;i++){
062.listData.add("item" + (i + listData.size()) );
063.}
064.mAdapter.notifyDataSetChanged();
065.mRecyclerView.loadMoreComplete();
066.}
067.}, 3000);
068. 
069.}
070.});
071. 
072.listData = new  ArrayList<String>();
073.mAdapter = new MyAdapter(listData);
074.for(int i = 0; i < 15 ;i++){
075.listData.add("item" + i);
076.}
077.mRecyclerView.setAdapter(mAdapter);
078.}
079. 
080.@Override
081.public boolean onCreateOptionsMenu(Menu menu) {
082.// Inflate the menu; this adds items to the action bar if it is present.
083.getMenuInflater().inflate(R.menu.menu_main, menu);
084.return true;
085.}
086. 
087.@Override
088.public boolean onOptionsItemSelected(MenuItem item) {
089.// Handle action bar item clicks here. The action bar will
090.// automatically handle clicks on the Home/Up button, so long
091.// as you specify a parent activity in AndroidManifest.xml.
092.int id = item.getItemId();
093. 
094.//noinspection SimplifiableIfStatement
095.if (id == R.id.action_settings) {
096.return true;
097.}
098. 
099.return super.onOptionsItemSelected(item);
100.}
101. 
102. 
103.}

3. adapter

01.package com.example.xrecyclerview;
02. 
03.import android.support.v7.widget.RecyclerView;
04.import android.view.LayoutInflater;
05.import android.view.View;
06.import android.view.ViewGroup;
07.import android.widget.TextView;
08. 
09.import java.util.ArrayList;
10. 
11./**
12.* Created by jianghejie on 15/11/26.
13.*/
14.public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
15.public ArrayList<String> datas = null;
16.public MyAdapter(ArrayList<String> datas) {
17.this.datas = datas;
18.}
19.//创建新View,被LayoutManager所调用
20.@Override
21.public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
22.View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item,viewGroup,false);
23.ViewHolder vh = new ViewHolder(view);
24.return vh;
25.}
26.//将数据与界面进行绑定的操作
27.@Override
28.public void onBindViewHolder(ViewHolder viewHolder, int position) {
29.viewHolder.mTextView.setText(datas.get(position));
30.}
31.//获取数据的数量
32.@Override
33.public int getItemCount() {
34.return datas.size();
35.}
36.//自定义的ViewHolder,持有每个Item的的所有界面元素
37.public static class ViewHolder extends RecyclerView.ViewHolder {
38.public TextView mTextView;
39.public ViewHolder(View view){
40.super(view);
41.mTextView = (TextView) view.findViewById(R.id.text);
42.}
43.}
44.}



XRecyclerView:实现下拉刷新、滚动到底部加载更多以及添加header功能的RecyclerView的更多相关文章

  1. Android如何定制一个下拉刷新,上滑加载更多的容器

    前言 下拉刷新和上滑加载更多,是一种比较常用的列表数据交互方式. android提供了原生的下拉刷新容器 SwipeRefreshLayout,可惜样式不能定制. 于是打算自己实现一个专用的.但是下拉 ...

  2. 滚动到底部加载更多及下拉刷新listview的使用

    最新内容建议直接访问原文:滚动到底部加载更多及下拉刷新listview的使用 本文主要介绍可同时实现下拉刷新及滑动到底部加载更多的ListView的使用. 该ListView优点包括:a. 可自定义下 ...

  3. android ListView的上部下拉刷新下部点击加载更多具体实现及拓展

    android ListView的上部下拉刷新下部点击加载更多具体实现及拓展 ListView下拉刷新,上拉自动加载更多 下拉刷新以及加载更多

  4. 一个简单的适用于Vue的下拉刷新,触底加载组件

    一个简单的适用于Vue的上拉刷新,触底加载组件,没有发布npm需要时直接粘贴定制修改即可 <template> <div class="list-warp-template ...

  5. ionic 上拉加载更多&瀑布流加载&滚动到底部加载更多 主意事项

    首先下拉刷新的代码是这样的,标红的地方为关键代码 <html> <head> <meta charset="utf-8"> <meta n ...

  6. Jquery实现滚动到底部加载更多(最原始)

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...

  7. vant list列表滚动到底部加载更多会滚动到顶部问题

    如果使用异步加载数据并使用了vant中的toast做加载中提示,则有可能会导致列表滚动高度为0,也就是回到了顶部.只要在list加载回调里不使用toast就可以避免这个问题.

  8. Android中GridView滚动到底部加载数据终极版

    之前在项目中有一个需求是需要GridView控件,滚动到底部自动加载.但是呢GridView控件并不提供诸如ListView监听滚动到底部的onScrollListener方法,为了实现这样一个效果, ...

  9. Jqeury Mobile实战之切屏效果以及屏幕滚动到底端加载更多和点击切换更多

    http://blog.csdn.net/q718330882/article/details/46120691 //页面滚动到底部加载更多事件 $( window ).scroll(function ...

随机推荐

  1. Python写业务逻辑的几个编码原则

    作为一个写业务逻辑的boy,我需要专注的就是把业务逻辑写好.写业务逻辑并不复杂,就是把编程最基础的东西使用好,有变量.循环.流程控制.函数.数据库等. 但是写出的逻辑要通俗易懂.易于理解,避免炫技.晦 ...

  2. 树莓派CM4 wifi频繁断开连接

    CM4核心板上自带的wifi模块连接上华为/小米的路由器5G热点以后,会频繁断开连接,断开连接前使用 iw dev 查看wifi信息如下: phy#0 Unnamed/non-netdev inter ...

  3. 使用proxy解决请求跨域问题

    背景 在 react 项目里,前端请求接口时出现了跨域问题(类似图片中的提示) 这时最快捷的方法就是让后端同学设置请求允许跨域(如图配置响应头) 如果后端同学不配合,就需要靠我们自己来了! 实现 Re ...

  4. JAVA整合kaptcha生成验证码 (字母验证码和算术验证码)

    引入maven <!--图片验证码--> <dependency> <groupId>com.github.penggle</groupId> < ...

  5. HDZ城市行深圳站|AIoT时代,如何抓住智联生活的战略机会点?

    摘要:2021年12月24日,HDZ城市行深圳站:AIoT引爆全场景应用新机会(智联生活专场)圆满落幕. 2021年12月24日,HDZ城市行深圳站:AIoT引爆全场景应用新机会(智联生活专场)圆满落 ...

  6. 【LeetCode】1462. 课程安排 IV Course Schedule IV (Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS 日期 题目地址:https://leetcod ...

  7. 【LeetCode】790. Domino and Tromino Tiling 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/domino-a ...

  8. 【漏洞复现】ThinkAdmin v5和v6 未授权列目录任意文件读取(CVE-2020-25540)

    ThinkAdmin v5和v6 未授权列目录/任意文件读取(CVE-2020-25540) 漏洞简介 ThinkAdmin是一套基于ThinkPHP框架的通用后台管理系统.ThinkAdmin v6 ...

  9. golang切片的一些自问自答

    你好,我是轩脉刃.这篇是关于go切片的一些问题和回答. go的切片基本上是代码中使用最多的一种数据结构了,使用这种数据结构有哪些要注意的点,这个是非常必要了解的东西.基本上,以前写的一篇博客 http ...

  10. C++函数参数的传递顺序

    C++编译器默认使用的是 __cdecl 模式,参数是通过栈传递的,因此是从右到左的传参顺序. int f(int a, int b, int c) { return 0; } int main(){ ...