Android RecyclerView (十)组件化封装
来源:互联网 发布:qt 调用dotnet 编程 编辑:程序博客网 时间:2024/06/05 08:32
pullrefreshrecyclerylib 开发文档
GitHub项目地址 点击查看详情
- 下拉刷新
- 上拉加载更多
- 多布局模式适配
- 加载中状态
- 加载无数据状态
1 工程添加依赖
使用前先去GitHub下载依赖库下载
然后再向工程中添加依赖
compile project(':pullrefreshrecyclerylib')
2 初始化基本使用
效果样式 一 无上拉加载更多 也无下拉刷新功能
效果样式 二 有上拉加载更多 有下拉刷新功能
效果样式 三 无上拉加载更多 有下拉刷新功能
效果样式 四 有上拉加载更多 无下拉刷新功能
2.1 创建RecyclerView并设置数据
//初始化 pullRecyclerViewUtils = PullRecyclerViewUtils.getInstance(); //1条目布局ID int itemLayoutId = R.layout.item_comm_base_layout; //2数据集合 final List<DataModel> list = new ArrayList<>(); //3初始化Recyclerview /** * 参数一 this Context实例 * 参数二 单一布局模式条目布局ID * 参数三 数据集合 * 参数四 回调监听 */ RelativeLayout relativeLayout = pullRecyclerViewUtils.setRecyclerViewFunction(this, itemLayoutId, list, mPullRecclerLinserner); //4相关设置 //---- //设置RecyclerView的模式 /** * * @param statue NORMAL,//正常状态下,没有下拉刷新也没有上拉加载更多 * PULL_REFRESH,//只有下拉刷新功能 * UP_LOAD_MORE,//只有上拉加载更多功能 * PULL_AND_UP//下拉刷新 上拉加载功能 * @see PullRecyclerViewUtils.RECYCLRYVIEW_STATUE */ switch (pageType) { case 1: //下拉刷新和上拉加载更多模式 pullRecyclerViewUtils.setRecyclerviewStatue(PullRecyclerViewUtils.RECYCLRYVIEW_STATUE.PULL_AND_UP); break; case 2: //无下拉刷新 也无上拉加载更多 pullRecyclerViewUtils.setRecyclerviewStatue(PullRecyclerViewUtils.RECYCLRYVIEW_STATUE.NORMAL); break; case 3: //无下拉刷新 只有上拉加载更多 pullRecyclerViewUtils.setRecyclerviewStatue(PullRecyclerViewUtils.RECYCLRYVIEW_STATUE.UP_LOAD_MORE); break; case 4: //下拉刷新 无上拉加载更多 pullRecyclerViewUtils.setRecyclerviewStatue(PullRecyclerViewUtils.RECYCLRYVIEW_STATUE.PULL_REFRESH); break; default: //下拉刷新和上拉加载更多模式 pullRecyclerViewUtils.setRecyclerviewStatue(PullRecyclerViewUtils.RECYCLRYVIEW_STATUE.PULL_AND_UP); break; } //---- //5将recyclerview添加到当前显示的页面中 maintContentLinearLayyout.addView(relativeLayout); //模拟网络 new Handler(getMainLooper()).postDelayed(new Runnable() { @Override public void run() { List<DataModel> list = new ArrayList<>(); for (int i = 0; i < 4; i++) { DataModel dataModel = new DataModel(); dataModel.name = "小燕子的情怀" + i; list.add(dataModel); } //更新数据 //这里需要注意的是 每次设置的数据集合都是一个新的List对象 pullRecyclerViewUtils.setLoadingDataList(list); } }, 3000);
2.2 回调监听
/** * RecyclerView相关操作的回调 */ private PullRecyclerViewLinserner mPullRecclerLinserner = new PullRecyclerViewLinserner() { //当触发上拉加载更多时,回调此方法 @Override public void loadMoreData() { //模拟网络请求 new Handler(getMainLooper()).postDelayed(new Runnable() { @Override public void run() { //请求成功的数据集合 List<DataModel> list = new ArrayList<>(); for (int i = 0; i < 16; i++) { DataModel dataModel = new DataModel(); dataModel.name = "小燕子的情怀" + i; list.add(dataModel); } //更新数据 //这里的数据集合为新的list对象就可以 //内部自动处理了数据的延续添加刷新 pullRecyclerViewUtils.setLoadingDataList(list); } }, 3000); } //当触发下拉刷新数据时会回调此方法 @Override public void loadingRefresDataFunction() { //模拟网络请求 new Handler(getMainLooper()).postDelayed(new Runnable() { @Override public void run() { //请求成功的数据集合 List<DataModel> list = new ArrayList<>(); for (int i = 0; i < 16; i++) { DataModel dataModel = new DataModel(); dataModel.name = "小燕子的情怀" + i; list.add(dataModel); } //这里的数据集合为新的list对象就可以 //内部自动处理了数据的清空更新 pullRecyclerViewUtils.setLoadingDataList(list); } }, 3000); } //设置数据回调方法 /** * * @param itemView 布局条目对应的View * @param position 当前条目位置 * @param itemType 当前的条目布局类型 * @param object 数据模型 */ @Override public void setViewDatas(View itemView, int position, int itemType, Object object) { //对就的模型数据 DataModel dataModel = (DataModel) object; //设置数据 TextView nameTextView = itemView.findViewById(R.id.tv_item_name); nameTextView.setText(dataModel.name); } };
3 设置多布局样式
效果样式(例如这里设置了三种Item的样式)
3.1 初始化设置 (与2中描述的基本一至)
在这里需要注意的是 ,初始化操作Recyclerview方式与2中描述的基本一至,重要的是在为RecyclerView设置数据的时候,要构造多布局样式数据模型PullRecyclerMoreStatueModel
/** * Created by androidlongs on 2017/8/21. * 站在顶峰,看世界 * 落在谷底,思人生 */public class PullRecyclerMoreStatueModel implements Serializable { //数据模型 public Object model; //布局类型 public int itemType=-1; //布局ID public int itemLayoutId=-1;}
//当前页面 要显示列表数据的父布局 LinearLayout maintContentLinearLayyout = findViewById(R.id.ll_content); //1初始化 pullRecyclerViewUtils = PullRecyclerViewUtils.getInstance(); //2数据集合 final List<PullRecyclerMoreStatueModel> list = new ArrayList<>(); //3初始化Recyclerview /** * 参数一 this Context实例 * 参数二 单一布局模式条目布局ID 多布局模式下可以传-1 * 参数三 数据集合 * 参数四 回调监听 */ RelativeLayout relativeLayout = pullRecyclerViewUtils.setRecyclerViewFunction(this, -1, list, mPullRecclerLinserner); //4相关设置 //---- //设置RecyclerView的模式 /** * * @param statue NORMAL,//正常状态下,没有下拉刷新也没有上拉加载更多 * PULL_REFRESH,//只有下拉刷新功能 * UP_LOAD_MORE,//只有上拉加载更多功能 * PULL_AND_UP//下拉刷新 上拉加载功能 * @see PullRecyclerViewUtils.RECYCLRYVIEW_STATUE */ //下拉刷新和上拉加载更多模式 pullRecyclerViewUtils.setRecyclerviewStatue(PullRecyclerViewUtils.RECYCLRYVIEW_STATUE.PULL_AND_UP); //---- //5将recyclerview添加到当前显示的页面中 maintContentLinearLayyout.addView(relativeLayout); //模拟网络 new Handler(getMainLooper()).postDelayed(new Runnable() { @Override public void run() { /** * 多而布局样式下 需要使用 PullRecyclerMoreStatueModel 数据模型 将数据和其对应的布局样式封装 */ List<PullRecyclerMoreStatueModel> list = new ArrayList<>(); for (int i = 0; i < 14; i++) { //网络请求的用户数据 DataModel dataModel = new DataModel(); dataModel.name = "小燕子的情怀" + i; //构造多布局样式与数据模式 PullRecyclerMoreStatueModel moreStatueModel = new PullRecyclerMoreStatueModel(); moreStatueModel.model = dataModel; if (i % 3 == 0) { //第一种布局样式 moreStatueModel.itemLayoutId = R.layout.item_comm_base_layout; moreStatueModel.itemType = 1; } else if (i % 3 == 1) { //第二种布局样式 moreStatueModel.itemLayoutId = R.layout.item_comm_base_2_layout; moreStatueModel.itemType = 2; } else { //第三种布局样式 moreStatueModel.itemLayoutId = R.layout.item_comm_base_3_layout; moreStatueModel.itemType = 3; } list.add(moreStatueModel); } //更新数据 //这里需要注意的是 每次设置的数据集合都是一个新的List对象 pullRecyclerViewUtils.setLoadingDataList(list); } }, 2000);
对应的回调设置数据中
private PullRecyclerViewLinserner mPullRecclerLinserner = new PullRecyclerViewLinserner() { //当触发上拉加载更多时,回调此方法 @Override public void loadMoreData() { } //当触发下拉刷新数据时会回调此方法 @Override public void loadingRefresDataFunction() { //模拟网络请求 } //设置数据回调方法 /** * * @param itemView 布局条目对应的View * @param position 当前条目位置 * @param itemType 当前的条目布局类型 * @param object 数据模型 */ @Override public void setViewDatas(View itemView, int position, int itemType, Object object) { //多布局模式下 object对应的数据类型是 PullRecyclerMoreStatueModel PullRecyclerMoreStatueModel pullRecyclerMoreStatueModel = (PullRecyclerMoreStatueModel) object; //获取对应的数据类型或者说是条目布局样式 itemType = pullRecyclerMoreStatueModel.itemType; //根据itemType来获取对应的数据 与 设置对应的数据显示 if (itemType == 1) { //对应就的模型数据 DataModel dataModel = (DataModel) pullRecyclerMoreStatueModel.model; //设置数据 TextView nameTextView = itemView.findViewById(R.id.tv_item_name); nameTextView.setText(dataModel.name); } else if (itemType == 2) { //对应的模型数据 DataModel dataModel = (DataModel) pullRecyclerMoreStatueModel.model; //设置数据 TextView nameTextView = itemView.findViewById(R.id.tv_item_name); nameTextView.setText(dataModel.name); } else { //对应的模型数据 DataModel dataModel = (DataModel) pullRecyclerMoreStatueModel.model; //设置数据 TextView nameTextView = itemView.findViewById(R.id.tv_item_name); nameTextView.setText(dataModel.name); } } };
4 设置多布局样式
效果样式一(例如这里设置了蓝色的背景)
效果样式二(例如这里自定义了一个背景)
4.1 初始化设置 (与2中描述的基本一至)
4.2 设置刷新背景(纯色)
pullRecyclerViewUtils.setMainBackgroundRelativeLayoutColor(Color.BLUE);
4.3 设置刷新背景 (自定义视图)
在这里提供了两种设置方式
//方式一 直接将自定义的背景样式xml 的ID设置 pullRecyclerViewUtils.addMainBackgroundChildLayout(R.layout.item_refresh_bg_layout); //方式二 设置一个构造 好的View View view = View.inflate(this,R.layout.item_refresh_bg_layout,null); pullRecyclerViewUtils.addMainBackgroundChildLayout(view);
4.4 设置刷新部位背景 (纯色)
//下拉刷新部位的背景颜色 设置 pullRecyclerViewUtils.setPullRefshBackGroundColor(Color.WHITE); //下拉刷新部位的显示文字的颜色 pullRecyclerViewUtils.setPullRefshTextColorFunction(Color.BLUE);
5 设置下拉刷新部分的样式
/** * @param statue PB_AND_TV,//显示 加载进度显示文字 * IV_AND_TV,//显示图片 加载进度显示文字 * PB,//只显示加载进度圈 * TV,//只显示加载文字 * IV//只显示加载图片 * @see PULLREFSH_SHOW_VIEW_STATUE */
5.1 样式一 显示刷新圆形进度与文字
//下拉刷新部位的背景颜色 设置 pullRecyclerViewUtils.setPullRefshBackGroundColor(Color.WHITE); //下拉刷新部位的显示文字的颜色 pullRecyclerViewUtils.setPullRefshTextColorFunction(Color.BLUE); //设置下拉刷新样式类型 pullRecyclerViewUtils.setPullRefshStatue(PullRecyclerViewUtils.PULLREFSH_SHOW_VIEW_STATUE.PB_AND_TV);
5.2 样式二 只显示刷新文字
//设置下拉刷新样式类型pullRecyclerViewUtils.setPullRefshStatue(PullRecyclerViewUtils.PULLREFSH_SHOW_VIEW_STATUE.TV);
5.3 样式三 只显示刷新圆形进度
//设置下拉刷新样式类型pullRecyclerViewUtils.setPullRefshStatue(PullRecyclerViewUtils.PULLREFSH_SHOW_VIEW_STATUE.PB);
5.4 样式四 只显示自定义图片
//设置下拉刷新显示图片pullRecyclerViewUtils.setPullRefshImageFunction(this.getResources().getDrawable(R.drawable.home_table_topic_header));//设置下拉刷新样式类型pullRecyclerViewUtils.setPullRefshStatue(PullRecyclerViewUtils.PULLREFSH_SHOW_VIEW_STATUE.IV);
5.5 样式五 只显示自定义帧动画
//设置下拉刷新显示 动画文件pullRecyclerViewUtils.setPullRefshImageFunction(this.getResources().getDrawable(R.drawable.dra_pull_anim));//设置下拉刷新样式类型pullRecyclerViewUtils.setPullRefshStatue(PullRecyclerViewUtils.PULLREFSH_SHOW_VIEW_STATUE.IV);
5.6 样式六 显示自定义图片和文字
//设置下拉刷新显示 动画文件pullRecyclerViewUtils.setPullRefshImageFunction(this.getResources().getDrawable(R.drawable.dra_pull_anim));//设置下拉刷新样式类型pullRecyclerViewUtils.setPullRefshStatue(PullRecyclerViewUtils.PULLREFSH_SHOW_VIEW_STATUE.IV_AND_TV);
6 设置首次进入页面后 无数据显示的样式
public enum SHOW_DEFAUTLE_PAGE_TYPE { NO_DATA,//无数据 LOADING,//加载中 NORMAL//列表数据页面}
6.1 显示正在加载中的圆形进度与显示文字
pullRecyclerViewUtils.setFirstDefaultPageType(PullRecyclerViewUtils.SHOW_DEFAUTLE_PAGE_TYPE.LOADING);
6.2 显示暂无数据显示文字
pullRecyclerViewUtils.setFirstDefaultPageType(PullRecyclerViewUtils.SHOW_DEFAUTLE_PAGE_TYPE.NO_DATA);
6.3 显示空的列表页面
pullRecyclerViewUtils.setFirstDefaultPageType(PullRecyclerViewUtils.SHOW_DEFAUTLE_PAGE_TYPE.NORMAL);
阅读全文
0 0
- Android RecyclerView (十)组件化封装
- android recyclerview adaper封装
- Android Recyclerview的封装
- Android 封装RecyclerView的Adapter
- Android RecyclerView通用Adapter封装
- Android 灵活的组件-RecyclerView
- Android杂谈(28)观公司项目RecyclerView封装有感
- Android学习笔记:超能RecyclerView组件使用(上)
- Android学习笔记:超能RecyclerView组件使用(上)
- Android 封装RecyclerView.Adapter,省其ViewHolder
- Android 对封装RecyclerView.Adapter讲解
- recyclerview封装
- RecyclerView封装
- RecyclerView封装
- android应用自动更新组件封装
- Android 自动更新Apk组件封装
- Android最新组件RecyclerView,替代ListView
- Android新组件RecyclerView的简单使用
- Koa2 —(2)
- SSM框架搭建
- 应用启动时间统计方法
- surfacetexture与camera结合基本流程
- ajax的登录处理
- Android RecyclerView (十)组件化封装
- 去掉AlertDialog边框的方法
- 项目中使用Shiro出现空指针异常的问题
- 编辑图片时,能够实时显示上传的图片(预览)
- jsp中的cookie与session的区别
- Java集合框架之Map---HashMap和LinkedHashMap源码分析
- matlab 二分法
- 枚举的定义和使用
- ts、js自定义方法,实现延迟