介绍:

一个实现了下拉刷新,滚动到底部加载更多以及添加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. 数组基础(Excel函数集团)

    此处文章均为本妖原创,供下载.学习.探讨! 文章下载源是Office365国内版1Driver,如有链接问题请联系我. 请勿用于商业! 谢谢 下载地址:https://officecommunity- ...

  2. Boto3访问AWS资源操作总结(1)

    最近在工作中需要对AWS上的部分资源进行查询和交叉分析,虽然场景都比较简单,但是这种半机械的工作当然还是交给Python来搞比较合适.AWS为Python提供的SDK库叫做boto3,所以我们建立一个 ...

  3. Spring5 概述及Spring IOC学习

    Spring Framework 5 1. Spring框架 1.1 Spring框架概述 1.2 主要内容 Spring框架是一个开源的JavaEE的应用程序 主要核心是 IOC(控制反转)和AOP ...

  4. MemoryCache 如何清除全部缓存?

    最近有个需求需要定时清理服务器上所有的缓存.本来以为很简单的调用一下 MemoryCache.Clear 方法就完事了.谁知道 MemoryCache 类以及 IMemoryCache 扩展方法都没有 ...

  5. CF1494B Berland Crossword 题解

    Content 有一种叫做 Berland crossword 的拼图游戏.这个拼图由 \(n\) 行 \(n\) 列组成,你可以将里面的一些格子涂成黑色.现在给出 \(T\) 个这样的拼图,每个拼图 ...

  6. Nginx 编译数格式化输出

    printf "%s\n" `nginx -V 2>&1` nginx -V 2>&1 | sed 's/ /\n/g'

  7. response 返回js的alert()语句,中文乱码如何解决

    response 返回js的alert()语句,中文乱码如何解决, 步骤1:在后台加上如下代码: response.setCharacterEncoding("utf-8"); r ...

  8. Spring核心原理之IoC容器初体验(2)

    本文节选自<Spring 5核心原理> 1 IoC与DI基本概念 IoC(Inversion of Control,控制反转)就是把原来代码里需要实现的对象创建.依赖,反转给容器来帮忙实现 ...

  9. 【九度OJ】题目1087:约数的个数 解题报告

    [九度OJ]题目1087:约数的个数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次 ...

  10. 【LeetCode】947. Most Stones Removed with Same Row or Column 解题报告(Python & C++)

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