概述

RecycleView分页加载封装,简单方便,功能齐全

详细

一、场景:

在项目开发中经常使用到列表集合,而目前RecycleView已经取代ListView,但是RecycleView目前没有分页功能,这就需要我们自己实现,一下是我封装分页功能的使用方法。

二、分页实现:

RecycleView分页主要测量列表滚动到底部,根据不同场景返回不同的viewHolder,每个viewHolder中有不同的itemLayout

  1. (position) {
  2. (position + == getItemCount()) {
  3. () {
  4. }
  5. } {
  6. }
  7. }

返回不同的viewHolder

  1. RecyclerView.ViewHolder (ViewGroup parentviewType) {
  2. (viewType == ) {
  3. View view = LayoutInflater.().inflate(R.layout.)view.setLayoutParams(LinearLayout.LayoutParams(LinearLayout.LayoutParams.ScreenUtils.()))FooterViewHolder(view)} (viewType == ) {
  4. View view = LayoutInflater.().inflate(R.layout.)view.setLayoutParams(LinearLayout.LayoutParams(LinearLayout.LayoutParams.ScreenUtils.()))FailedViewHolder(view)} {
  5. View view = LayoutInflater.().inflate()BaseViewHolder holder = BaseViewHolder(view)holder}
  6. }

在判断列表滚动到底部的时候,判断后面还有没有更多数据,如果有,调用加载更多的接口回调,如果没有将isHasMore设置成false即可。

  1. (RecyclerView recyclerViewnewState) {
  2. .onScrollStateChanged(recyclerViewnewState)(newState == RecyclerView.&& ((+ ) == getItemCount())) {
  3. .onLoad()}
  4. }
  5.  
  6. (RecyclerView recyclerViewdxdy) {
  7. .onScrolled(recyclerViewdxdy)= ((LinearLayoutManager) recyclerView.getLayoutManager()).findLastCompletelyVisibleItemPosition()}

三、使用分页:

1、见demo中的BaseAdapter、BaseBean、BaseViewHolder和listener、utils、widget包中代码赋值到你的项目中;

2、创建自己的bean类,继承BaseBean

  1. public class MyBean extends BaseBean {
  2. private String content;
  3.  
  4. public String getContent() {
  5. return content;
  6. }
  7.  
  8. public void setContent(String content) {
  9. this.content = content;
  10. }
  11. }

3、创建自己的adapter,集成BaseAdapter并实现setViewHolder方法

  1. public class MyAdapter extends BaseAdapter {
  2. public MyAdapter(Context context, List<MyBean> list) {
  3. super(context, list);
  4. //设置项布局
  5. setItemLayout(R.layout.layout_item);
  6. }
  7.  
  8. @Override
  9. public void setViewHolder(RecyclerView.ViewHolder holder, int position) {
  10. if (holder instanceof BaseViewHolder) {
  11. MyBean bean = (MyBean) list.get(position);
  12. BaseViewHolder baseViewHolder = (BaseViewHolder) holder;
  13. //获取项布局中控件设置内容
  14. TextView tv = baseViewHolder.itemView.findViewById(R.id.tv_item);
  15. tv.setText(bean.getContent());
  16. } else if (holder instanceof FooterViewHolder) {
  17. if (isHasMore) {
  18. ((FooterViewHolder) holder).getTvFooter().setText("正在加载中...");
  19. ((FooterViewHolder) holder).getProgressBar().setVisibility(View.VISIBLE);
  20. } else {
  21. ((FooterViewHolder) holder).getTvFooter().setText("没有更多了");
  22. ((FooterViewHolder) holder).getProgressBar().setVisibility(View.GONE);
  23. }
  24. } else {
  25. ((FailedViewHolder) holder).getTvFailed().setText("网络异常");
  26. }
  27. }
  28.  
  29. }

4、调用分页

1)初始化RecycleView

  1. recyclerView.setHasFixedSize(true);
  2. LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
  3. recyclerView.addItemDecoration(new MyItemDecoration(this, DividerItemDecoration.VERTICAL_LIST, true, 30));
  4. recyclerView.setLayoutManager(linearLayoutManager);
  5. recyclerView.setItemAnimator(new DefaultItemAnimator());

2)、设置adapter

  1. private void initData() {
  2. for (int i = 0; i < 20; i++) {
  3. MyBean bean = new MyBean();
  4. bean.setContent("第" + i + "条内容");
  5. list.add(bean);
  6. }
  7. adapter = new MyAdapter(this, list);
  8. recyclerView.setAdapter(adapter);
  9. adapter.setOnItemClickListener(onItemClickListener);
  10. adapter.setView(recyclerView);
  11. adapter.setOnLoadMoreListener(onLoadMoreListener);
  12. }
  1. OnLoadMoreListener = OnLoadMoreListener() {
  2. () {
  3. (!.isHasMore()) {
  4. }
  5. (i = * i < * + i++) {
  6. MyBean bean = MyBean()bean.setContent(+ i + ).add(bean)}
  7. = + (== ) {
  8. .setHasMore()}
  9. .notifyDataSetChanged()}
  10. }

以上完成调用,没有使用其他第三方代码

下面是效果图

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

android中RecycleView分页原生代码封装,无任何第三方代的更多相关文章

  1. android:Android 6.0权限控制代码封装

    新建的Activity类可以继承这个Activity,这个类封装了关于新版的权限处理相关的代码 使用方法: package com.glsite.phone; import android.conte ...

  2. Android 中 js 和 原生交互

    Android中的WebView 中加载的URL 默认是在手机浏览器中加载的,我们可以覆盖这种默认的动作,让网页在WebView中打开.通过设置WebView的WebViewClent 达到这个效果. ...

  3. Android中WebView的JavaScript代码和本地代码交互的三种方式

    一.Android中WebView的漏洞分析最近在开发过程中遇到一个问题,就是WebView使用的时候,还是需要解决之前系统(4.2之前)导致的一个漏洞,虽然现在这个系统版本用户很少了,但是也不能忽视 ...

  4. Android中多线程下载列表的封装实现(含进度反馈)

    来源:http://blog.csdn.net/u011638883/article/details/17347015 实现了一下Android中的文件多线程下载模块,支持自定义线程数.断点续传.下载 ...

  5. 1.Android中解析json程序代码

    Android程序解析json数据可以通过gson的方式,这种情况需要导入相应的jar包.测试代码如下: @Override protected void onCreate(Bundle savedI ...

  6. android中listview分页载入数据

    前段时间做的新浪微博项目一直想实现listview分页载入数据,今天最终实现了,哈哈!感觉挺好的,今天又写了个demo给大家分享下. 首先说下listview的优化方案,这也是面试中常考的题目.优化方 ...

  7. Android中ListView分页加载数据

    public class MainActivity extends Activity { private ListView listView=null; //listview的数据填充器 privat ...

  8. php中上传图片,原生代码

    一.实现图片上传方法一 html的写法: <form action="handle.php" name="form" method="post& ...

  9. Android中使用progurad混淆代码

    第一步,取消project.properties中关于progurad的注释,开启progurad,默认的配置文件会被加载进来. proguard.config=${sdk.dir}/tools/pr ...

随机推荐

  1. 2015 UESTC 搜索专题E题 吴队长征婚 爆搜

    吴队长征婚 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Descri ...

  2. Eclipse打开.class文件

    1.准备材料 jad.exe    下载地址  https://varaneckas.com/jad/,根据系统去选择(就当是废话)  下载下来的是jad158g.win.zip压缩文件,解压后有个j ...

  3. MySQL时间戳与日期互转

    1.UNIX时间戳转换为日期用函数: FROM_UNIXTIME() ); 输出:2006-08-22 12:11:10 2.日期转换为UNIX时间戳用函数: UNIX_TIMESTAMP() sel ...

  4. JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式

    JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 它基于JavaScript(Standard ECMA-262 3rd Edition - D ...

  5. Spring @PostConstruct和@PreDestroy实例

    在Spring中,既可以实现InitializingBean和DisposableBean接口或在bean配置文件中指定 init-method 和 destroy-method 在初始化和销毁回调函 ...

  6. Visual Studio技巧集锦

    总结了一下VS的使用快捷键, 以下这些是必须转化为肌肉记忆的. 1.Ctrl+Shift+V循环粘贴不同的内容 剪贴板最多可以保存20项内容,通过Ctrl+Shift+V可以循环粘贴出之前复制过的内容 ...

  7. NUMA架构

    参考: http://www.ibm.com/developerworks/cn/linux/l-numa/ http://blog.sina.com.cn/s/blog_3f5c2f8c01000b ...

  8. java多线程知识点汇总(二)多线程实例解析

    本实验主要考察多线程对单例模式的操作,和多线程对同一资源的读取,两个知识.实验涉及到三个类: 1)一个pojo类Student,包括set/get方法. 2)一个线程类,设置student的成员变量a ...

  9. TurboLinux11system»adjtimex简介

    Adjtimex介绍 linux 系统有两个时钟:一个是由主板电池驱动的“Real Time Clock”也叫做RTC或者叫CMOS时钟,硬件时钟.当操作系统关机的时候,用这个来记录时间,但是对于运行 ...

  10. Linux命令执行的屏幕输出内容重定向到日志文件

    摘要: 作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 快速mark一下这个命令细节,免得以后使用又忘记了 大家都知道可以用echo来输出内容到 ...