android中RecycleView分页原生代码封装,无任何第三方代
概述
详细
一、场景:
在项目开发中经常使用到列表集合,而目前RecycleView已经取代ListView,但是RecycleView目前没有分页功能,这就需要我们自己实现,一下是我封装分页功能的使用方法。
二、分页实现:
RecycleView分页主要测量列表滚动到底部,根据不同场景返回不同的viewHolder,每个viewHolder中有不同的itemLayout
(position) {
(position + == getItemCount()) {
() {
}
} {
}
}
返回不同的viewHolder
RecyclerView.ViewHolder (ViewGroup parentviewType) {
(viewType == ) {
View view = LayoutInflater.().inflate(R.layout.)view.setLayoutParams(LinearLayout.LayoutParams(LinearLayout.LayoutParams.ScreenUtils.()))FooterViewHolder(view)} (viewType == ) {
View view = LayoutInflater.().inflate(R.layout.)view.setLayoutParams(LinearLayout.LayoutParams(LinearLayout.LayoutParams.ScreenUtils.()))FailedViewHolder(view)} {
View view = LayoutInflater.().inflate()BaseViewHolder holder = BaseViewHolder(view)holder}
}
在判断列表滚动到底部的时候,判断后面还有没有更多数据,如果有,调用加载更多的接口回调,如果没有将isHasMore设置成false即可。
(RecyclerView recyclerViewnewState) {
.onScrollStateChanged(recyclerViewnewState)(newState == RecyclerView.&& ((+ ) == getItemCount())) {
.onLoad()}
}
(RecyclerView recyclerViewdxdy) {
.onScrolled(recyclerViewdxdy)= ((LinearLayoutManager) recyclerView.getLayoutManager()).findLastCompletelyVisibleItemPosition()}
三、使用分页:
1、见demo中的BaseAdapter、BaseBean、BaseViewHolder和listener、utils、widget包中代码赋值到你的项目中;

2、创建自己的bean类,继承BaseBean
public class MyBean extends BaseBean {
private String content;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
3、创建自己的adapter,集成BaseAdapter并实现setViewHolder方法
public class MyAdapter extends BaseAdapter {
public MyAdapter(Context context, List<MyBean> list) {
super(context, list);
//设置项布局
setItemLayout(R.layout.layout_item);
}
@Override
public void setViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof BaseViewHolder) {
MyBean bean = (MyBean) list.get(position);
BaseViewHolder baseViewHolder = (BaseViewHolder) holder;
//获取项布局中控件设置内容
TextView tv = baseViewHolder.itemView.findViewById(R.id.tv_item);
tv.setText(bean.getContent());
} else if (holder instanceof FooterViewHolder) {
if (isHasMore) {
((FooterViewHolder) holder).getTvFooter().setText("正在加载中...");
((FooterViewHolder) holder).getProgressBar().setVisibility(View.VISIBLE);
} else {
((FooterViewHolder) holder).getTvFooter().setText("没有更多了");
((FooterViewHolder) holder).getProgressBar().setVisibility(View.GONE);
}
} else {
((FailedViewHolder) holder).getTvFailed().setText("网络异常");
}
}
}
4、调用分页
1)初始化RecycleView
recyclerView.setHasFixedSize(true);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
recyclerView.addItemDecoration(new MyItemDecoration(this, DividerItemDecoration.VERTICAL_LIST, true, 30));
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
2)、设置adapter
private void initData() {
for (int i = 0; i < 20; i++) {
MyBean bean = new MyBean();
bean.setContent("第" + i + "条内容");
list.add(bean);
}
adapter = new MyAdapter(this, list);
recyclerView.setAdapter(adapter);
adapter.setOnItemClickListener(onItemClickListener);
adapter.setView(recyclerView);
adapter.setOnLoadMoreListener(onLoadMoreListener);
}
OnLoadMoreListener = OnLoadMoreListener() {
() {
(!.isHasMore()) {
}
(i = * i < * + i++) {
MyBean bean = MyBean()bean.setContent(+ i + ).add(bean)}
= + (== ) {
.setHasMore()}
.notifyDataSetChanged()}
}
以上完成调用,没有使用其他第三方代码
下面是效果图


注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权
android中RecycleView分页原生代码封装,无任何第三方代的更多相关文章
- android:Android 6.0权限控制代码封装
新建的Activity类可以继承这个Activity,这个类封装了关于新版的权限处理相关的代码 使用方法: package com.glsite.phone; import android.conte ...
- Android 中 js 和 原生交互
Android中的WebView 中加载的URL 默认是在手机浏览器中加载的,我们可以覆盖这种默认的动作,让网页在WebView中打开.通过设置WebView的WebViewClent 达到这个效果. ...
- Android中WebView的JavaScript代码和本地代码交互的三种方式
一.Android中WebView的漏洞分析最近在开发过程中遇到一个问题,就是WebView使用的时候,还是需要解决之前系统(4.2之前)导致的一个漏洞,虽然现在这个系统版本用户很少了,但是也不能忽视 ...
- Android中多线程下载列表的封装实现(含进度反馈)
来源:http://blog.csdn.net/u011638883/article/details/17347015 实现了一下Android中的文件多线程下载模块,支持自定义线程数.断点续传.下载 ...
- 1.Android中解析json程序代码
Android程序解析json数据可以通过gson的方式,这种情况需要导入相应的jar包.测试代码如下: @Override protected void onCreate(Bundle savedI ...
- android中listview分页载入数据
前段时间做的新浪微博项目一直想实现listview分页载入数据,今天最终实现了,哈哈!感觉挺好的,今天又写了个demo给大家分享下. 首先说下listview的优化方案,这也是面试中常考的题目.优化方 ...
- Android中ListView分页加载数据
public class MainActivity extends Activity { private ListView listView=null; //listview的数据填充器 privat ...
- php中上传图片,原生代码
一.实现图片上传方法一 html的写法: <form action="handle.php" name="form" method="post& ...
- Android中使用progurad混淆代码
第一步,取消project.properties中关于progurad的注释,开启progurad,默认的配置文件会被加载进来. proguard.config=${sdk.dir}/tools/pr ...
随机推荐
- Shell基础学习(四) echo命令
1.显示普通的字符串 echo "boring" 2.显示转义字符 echo "\"It is a test!\""; 3.read 命令从 ...
- 一些WPF中的滤镜特效——Effect Library
WPF支持类似PhotoShop的滤镜功能,称之为Effect.在.Net 4.0中,WPF就废弃了对BitMapEffect的支持,转向使用支持GPU加速的Effect类,例如,我们可以使用如下代码 ...
- MYSQL DBA大牛
http://www.penglixun.com/masters_books/dba_masters
- 狗日的rem
rem这是个低调的css单位,近一两年开始崭露头角,有许多同学对rem的评价不一,有的在尝试使用,有的在使用过程中遇到坑就弃用了.但是我对rem综合评价是用来做web app它绝对是最合适的人选之一. ...
- Wix使用整理(二)
1) 安装卸载时进行日志记录 Wix 制作的 Installer 的调试很麻烦,没有直接的 Bug 工具,可以通过记录安装日志的方式进行间接调试.命令为 msiexec /i pack ...
- 树状数组求第K小值 (spoj227 Ordering the Soldiers && hdu2852 KiKi's K-Number)
题目:http://www.spoj.com/problems/ORDERS/ and pid=2852">http://acm.hdu.edu.cn/showproblem.php? ...
- 7款Flash和Javascript网页视频播放器
Flash和javascript网页视频播放器.梦想中的视频播放器是这样的: 支持所有格式,兼容所有主流视频网站,支持播放列表.视频缩略图.全屏播放.画面调节.预加载.体积贼小,功能贼多……. 也许你 ...
- Multiline ComboBox
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- windows服务与计划任务
1. 打开Visual Studio 2012新建一个project Solution: 2. 选择Windows->windows Service,修改服务名称:MyFirstService: ...
- axure 6.5 汉化正式版软件及注册码
Axure公司发布了Axure RP 6.5 正式版. 官方主页: http://www.axure.com/news 官方下载: http://www.axure.com/download 视频介绍 ...