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 ... 
随机推荐
- bzoj2200道路和航线
			试题描述 Farmer John 正在一个新的销售区域对他的牛奶销售方案进行调查.他想把牛奶送到 T (1≤T≤2.5×10^4)个城镇 ,编号为 1 到 T.这些城镇之间通过 R 条道路(编号为 1 ... 
- ACM -- 算法小结(三)反转句子顺序与反转单词组成顺序
			hdoj 1321 反转句子字母顺序 ac 2011/10/05 #include <iostream> #include <string> #include <algo ... 
- Codeforces Beta Round #7 C. Line Exgcd
			C. Line 题目连接: http://www.codeforces.com/contest/7/problem/C Description A line on the plane is descr ... 
- svn 服务器搭建及使用 三
			SVN服务器搭建和使用(三) 接下来,试试用TortoiseSVN修改文件,添加文件,删除文件,以及如何解决冲突等. 添加文件 在检出的工作副本中添加一个Readme.txt文本文件,这时候这个文本文 ... 
- 11.2  为什么要使用 MVC
			以前的大部分应用程序(非Android应用)都是用像ASP.PHP或者CFML这样的过程化(自PHP5.0版本后已全面支持面向对象模型)语言来创建的.它们将像数据库查询语句这样的数据层代码和像HTML ... 
- L脚本语言语法手冊 0.10版
			L脚本语言语法手冊 0.10版 简 介 L脚本语言是一个轻量级的,旨在接近自然语言的编程语言,眼下支持在中文.英文基础上的编程.并可扩展为随意语种.L脚本语言的语法结构简单.程序结构相对 ... 
- Netty Channel 接口名词理解
			1.Channel channel 是负责数据读,写的对象,有点类似于老的io里面的stream.它和stream的区别,channel是双向的,既可以write 也可以read,而stream要分o ... 
- mongodb拷贝数据库copyDatabase()。实现释放磁盘空间的方法。
			下面我们一起来看看关于mongodb拷贝数据库copyDatabase().实现释放磁盘空间的方法,希望文章对各位同学会有所帮助. db.copyDatabase("from",& ... 
- C#调用API向外部程序发送数据
			C#调用API向外部程序发送数据 最近有可能要做一个项目.在项目中有这么一个功能,在A程序中调用B程序,同时在A程序中进行登陆后,要将A程序的登录名和密码自动填充到B程序的登陆对话框中,这样B程序就不 ... 
- Git 学习(二)版本库创建
			Git 版本库创建 什么是版本库(repository)? 可理解为文件仓库.由Git管理每个文件的新增.修改及删除,但这个仓库可以追溯历史.可还原至任意历史节点. 版本库创建 创建一个版本库非常简单 ... 
