XRecyclerView:实现下拉刷新、滚动到底部加载更多以及添加header功能的RecyclerView
介绍:
一个实现了下拉刷新,滚动到底部加载更多以及添加header功能的的RecyclerView。使用方式和RecyclerView完全一致,不需要额外的layout,不需要写特殊的adater。 加载效果内置了AVLoadingIndicatorView上的所有效果,可以根据需要指定。
项目地址:https://github.com/jianghejie/XRecyclerView
效果:
使用:
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的更多相关文章
- Android如何定制一个下拉刷新,上滑加载更多的容器
前言 下拉刷新和上滑加载更多,是一种比较常用的列表数据交互方式. android提供了原生的下拉刷新容器 SwipeRefreshLayout,可惜样式不能定制. 于是打算自己实现一个专用的.但是下拉 ...
- 滚动到底部加载更多及下拉刷新listview的使用
最新内容建议直接访问原文:滚动到底部加载更多及下拉刷新listview的使用 本文主要介绍可同时实现下拉刷新及滑动到底部加载更多的ListView的使用. 该ListView优点包括:a. 可自定义下 ...
- android ListView的上部下拉刷新下部点击加载更多具体实现及拓展
android ListView的上部下拉刷新下部点击加载更多具体实现及拓展 ListView下拉刷新,上拉自动加载更多 下拉刷新以及加载更多
- 一个简单的适用于Vue的下拉刷新,触底加载组件
一个简单的适用于Vue的上拉刷新,触底加载组件,没有发布npm需要时直接粘贴定制修改即可 <template> <div class="list-warp-template ...
- ionic 上拉加载更多&瀑布流加载&滚动到底部加载更多 主意事项
首先下拉刷新的代码是这样的,标红的地方为关键代码 <html> <head> <meta charset="utf-8"> <meta n ...
- Jquery实现滚动到底部加载更多(最原始)
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...
- vant list列表滚动到底部加载更多会滚动到顶部问题
如果使用异步加载数据并使用了vant中的toast做加载中提示,则有可能会导致列表滚动高度为0,也就是回到了顶部.只要在list加载回调里不使用toast就可以避免这个问题.
- Android中GridView滚动到底部加载数据终极版
之前在项目中有一个需求是需要GridView控件,滚动到底部自动加载.但是呢GridView控件并不提供诸如ListView监听滚动到底部的onScrollListener方法,为了实现这样一个效果, ...
- Jqeury Mobile实战之切屏效果以及屏幕滚动到底端加载更多和点击切换更多
http://blog.csdn.net/q718330882/article/details/46120691 //页面滚动到底部加载更多事件 $( window ).scroll(function ...
随机推荐
- Python写业务逻辑的几个编码原则
作为一个写业务逻辑的boy,我需要专注的就是把业务逻辑写好.写业务逻辑并不复杂,就是把编程最基础的东西使用好,有变量.循环.流程控制.函数.数据库等. 但是写出的逻辑要通俗易懂.易于理解,避免炫技.晦 ...
- 树莓派CM4 wifi频繁断开连接
CM4核心板上自带的wifi模块连接上华为/小米的路由器5G热点以后,会频繁断开连接,断开连接前使用 iw dev 查看wifi信息如下: phy#0 Unnamed/non-netdev inter ...
- 使用proxy解决请求跨域问题
背景 在 react 项目里,前端请求接口时出现了跨域问题(类似图片中的提示) 这时最快捷的方法就是让后端同学设置请求允许跨域(如图配置响应头) 如果后端同学不配合,就需要靠我们自己来了! 实现 Re ...
- JAVA整合kaptcha生成验证码 (字母验证码和算术验证码)
引入maven <!--图片验证码--> <dependency> <groupId>com.github.penggle</groupId> < ...
- HDZ城市行深圳站|AIoT时代,如何抓住智联生活的战略机会点?
摘要:2021年12月24日,HDZ城市行深圳站:AIoT引爆全场景应用新机会(智联生活专场)圆满落幕. 2021年12月24日,HDZ城市行深圳站:AIoT引爆全场景应用新机会(智联生活专场)圆满落 ...
- 【LeetCode】1462. 课程安排 IV Course Schedule IV (Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS 日期 题目地址:https://leetcod ...
- 【LeetCode】790. Domino and Tromino Tiling 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/domino-a ...
- 【漏洞复现】ThinkAdmin v5和v6 未授权列目录任意文件读取(CVE-2020-25540)
ThinkAdmin v5和v6 未授权列目录/任意文件读取(CVE-2020-25540) 漏洞简介 ThinkAdmin是一套基于ThinkPHP框架的通用后台管理系统.ThinkAdmin v6 ...
- golang切片的一些自问自答
你好,我是轩脉刃.这篇是关于go切片的一些问题和回答. go的切片基本上是代码中使用最多的一种数据结构了,使用这种数据结构有哪些要注意的点,这个是非常必要了解的东西.基本上,以前写的一篇博客 http ...
- C++函数参数的传递顺序
C++编译器默认使用的是 __cdecl 模式,参数是通过栈传递的,因此是从右到左的传参顺序. int f(int a, int b, int c) { return 0; } int main(){ ...