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 ...
随机推荐
- Android消息机制——Handler
/**android的消息处理有三个核心类:Looper,Handler和Message.其实还有一个MessageQueue(消息队列), * 但是MessageQueue被封装到Looper里 ...
- LCA(倍增在线算法) codevs 2370 小机房的树
codevs 2370 小机房的树 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点, ...
- 洛谷P1462 通往奥格瑞玛的道路
题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目描述 在艾泽拉斯, ...
- ThinkPHP -- 开发初体验及其几个配置文件的介绍
ThinkPHP是一款不错的轻量级的PHP+MVC框架,它吸取了Ruby On Rails的特性,不仅将Model.View.Controller分开,而且实现了ORM.模板标签等高级特性. 开 ...
- [转]Intent和IntentFilter详解
Intent Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描 ...
- 客户端获取ip
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Apple Developer申请成功
上周日白天,我去申请了Apple Developer.我先是在百度上浏览了一些经验教程,但是点进苹果开发者官网时却发现完全不是那么一回事.盖因它的页面经常在变,如同现在苹果在主推tvOS这个对中国用户 ...
- PSCollectionView瀑布流实现
[-] 一基本原理 二具体实现 相关数据结构 视图更新方式 relayoutViews方法 removeAndAddCellsIfNecessary方法 select方法 重用数据块视图机制 三使用方 ...
- Java 3D游戏引擎——JME(java Monkey Engine)
转自:http://bbs.gameres.com/forum.php?mod=viewthread&tid=180732 JME(java Monkey Engine),一个非常棒的Java ...
- 《C++反汇编与逆向分析技术揭秘》之十——构造函数
对象生成时会自动调用构造函数.只要找到了定义对象的地方,就找到了构造函数调用的时机.不同作用域的对象的生命周期不同,如局部对象.全局对象.静态对象等的生命周期各不相同,只要知道了对象的生命周期,便可以 ...