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 ...
随机推荐
- 2015 UESTC 搜索专题E题 吴队长征婚 爆搜
吴队长征婚 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Descri ...
- Eclipse打开.class文件
1.准备材料 jad.exe 下载地址 https://varaneckas.com/jad/,根据系统去选择(就当是废话) 下载下来的是jad158g.win.zip压缩文件,解压后有个j ...
- MySQL时间戳与日期互转
1.UNIX时间戳转换为日期用函数: FROM_UNIXTIME() ); 输出:2006-08-22 12:11:10 2.日期转换为UNIX时间戳用函数: UNIX_TIMESTAMP() sel ...
- JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式
JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 它基于JavaScript(Standard ECMA-262 3rd Edition - D ...
- Spring @PostConstruct和@PreDestroy实例
在Spring中,既可以实现InitializingBean和DisposableBean接口或在bean配置文件中指定 init-method 和 destroy-method 在初始化和销毁回调函 ...
- Visual Studio技巧集锦
总结了一下VS的使用快捷键, 以下这些是必须转化为肌肉记忆的. 1.Ctrl+Shift+V循环粘贴不同的内容 剪贴板最多可以保存20项内容,通过Ctrl+Shift+V可以循环粘贴出之前复制过的内容 ...
- NUMA架构
参考: http://www.ibm.com/developerworks/cn/linux/l-numa/ http://blog.sina.com.cn/s/blog_3f5c2f8c01000b ...
- java多线程知识点汇总(二)多线程实例解析
本实验主要考察多线程对单例模式的操作,和多线程对同一资源的读取,两个知识.实验涉及到三个类: 1)一个pojo类Student,包括set/get方法. 2)一个线程类,设置student的成员变量a ...
- TurboLinux11system»adjtimex简介
Adjtimex介绍 linux 系统有两个时钟:一个是由主板电池驱动的“Real Time Clock”也叫做RTC或者叫CMOS时钟,硬件时钟.当操作系统关机的时候,用这个来记录时间,但是对于运行 ...
- Linux命令执行的屏幕输出内容重定向到日志文件
摘要: 作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 快速mark一下这个命令细节,免得以后使用又忘记了 大家都知道可以用echo来输出内容到 ...