Recycleview下拉刷新,上拉加载的思路
来源:互联网 发布:稳定的排序算法 编辑:程序博客网 时间:2024/05/17 00:51
1.事件处理,跟listview一样,重写ontouch,判断状态等。在加载的事件中,给this.getAdapter.mList的最后一个位置添加数据;刷新的事件中,给this.getAdapter.mList的第一个位置添加数据。在onTouch的Up方法中,进行数据的删除工作,这样就是实现了下拉显示动画,抬手就消失。
2.关键点,listview有addHeadView和addFootView;recycleview没有这个方法,所以需要在adapter的getItemViewType方法中做文章;这里返回顶部和底部view的type,根据type去加载布局。
实例:
Recycleview
public class MyRecycleview extends RecyclerView { public OnScrollChageListener onScrollChageListener; public void setOnScrollChageListener(OnScrollChageListener onScrollChageListener) { this.onScrollChageListener = onScrollChageListener; } public interface OnScrollChageListener { void onLoadMore(); void onRefresh(); } ; public MyRecycleview(Context context) { super(context); } public MyRecycleview(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public MyRecycleview(Context context, @Nullable AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } float y; //这个加载中的item是否已经添加了,已经添加就不再重复添加 boolean hadShow; //是否需要走加载或者刷新的方法 boolean isJiaZai; boolean isShuaXin; @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_UP: MyRecycleviewAdapter adapter = (MyRecycleviewAdapter) this.getAdapter(); hadShow = false; if (isJiaZai) { isJiaZai = false; isJiaZai = false; //加载,删第最后一个 adapter.mList.remove(adapter.mList.size() - 1); this.getAdapter().notifyDataSetChanged(); } if (isShuaXin) { isJiaZai = false; isJiaZai = false; //刷新,删第一个 adapter.mList.remove(0); this.getAdapter().notifyDataSetChanged(); } break; case MotionEvent.ACTION_DOWN: y = event.getY(); hadShow = false; break; case MotionEvent.ACTION_MOVE: MyRecycleviewAdapter adapter1 = (MyRecycleviewAdapter) this.getAdapter(); Log.e("Recycleview滚动事件", "=========="); float yp = event.getY(); if ((yp - y) > 0.1 * MyUtils.height) {//表示可以走方法了 isShuaXin = true; isJiaZai = false; Log.e("下拉了", "========"); if (hadShow) { } else { hadShow = true; Collections.reverse(adapter1.mList); //加头 Bean bean = new Bean(); bean.setHeadOrFootView(true); adapter1.mList.add(bean); Collections.reverse(adapter1.mList); this.getAdapter().notifyDataSetChanged(); } onScrollChageListener.onLoadMore(); } else if ((yp - y) < -0.0 * MyUtils.height) { Log.e("上拉了", "========"); isJiaZai = true; isShuaXin = false; //加尾巴 if (hadShow) { } else { Bean bean = new Bean(); bean.setHeadOrFootView(true); hadShow = true; adapter1.mList.add(bean); this.getAdapter().notifyDataSetChanged(); onScrollChageListener.onRefresh(); } } default: Log.e("Recycleview的其他事件", "============="); break; } return super.onTouchEvent(event); }}Adapter
跟普通的相同,就是处理下type。
不足:和adapter和bean的关联性太大,扩展性差差差
解决方案:
定义一个bean,在这个bean中有一个isHeadOrFoot的变量,初始化给false;对于不同的model,必须继承该bean。
对于adapter的依赖性,解决方案暂无。
对于adapter,跟自定义recycleview有关的部分是adapter中的list;所以给定一个adapter,该adapter有一个list变量,自己项目逻辑的adater通过继承然后使用adaper.setList赋值来实现。(该方法待测试,待续)
阅读全文
0 0
- Recycleview下拉刷新,上拉加载的思路
- RecycleView上拉加载和下拉刷新
- RecycleView下拉刷新上拉加载
- recycleView下拉刷新上拉加载
- RecycleView上拉刷新下拉加载
- 自定义下拉刷新和上拉加载的recycleview
- 【实训】自定义上拉加载下拉刷新的RecycleView
- Recycleview的上拉刷新与下拉加载
- 下拉刷新 上拉加载的 ListView RecycleView ScorllView
- RecycleView 上拉加载下拉刷新 分页加载
- 使用SwipeRefreshLayout实现recycleview下拉刷新上拉加载
- RecycleView上拉加载和下拉刷新二
- SwipeRefreshLayout +RecycleView实现上拉加载更多和下拉刷新
- pullloadmorerecyclerview实现recycleview上拉加载,下拉刷新
- SwipeRefreshLayout+RecycleView实现下拉刷新上拉加载
- 下拉刷新上拉加载RecycleView效果出众
- RecycleView添加下拉刷新、上拉加载更多
- RecycleView 布局布局管理器 上拉加载 下拉刷新
- SVN版本控制
- CentOS6开启FTP及telnet服务教程
- NOPI\\Excel导入数据
- Linux下几种RTP协议实现的比较和JRTPLIB编程讲解
- python在windows下import其他模块的注意事项
- Recycleview下拉刷新,上拉加载的思路
- java web开发问题集锦
- 《COM技术内幕——微软组件对象模型》(Inside COM)一书部分源码 for VS 2010
- WebApp图片缩放
- MySQL触发器使用详解
- Android Fingerprint -- HAL层的初始化工作
- Minimum Size for Bigfile Tablespace in 12c (Doc ID 2076125.1)
- Qt5.5在ubuntu下解决 GL/gl.h: No such file or directory 与 cannot find -lGL
- java笔记