一、前言
最近有一个需求就是上拉、下拉整体刷新一页数据,并且将下一页数据整体划出显示,上一页数据则消失。这个类似于选股宝的头条选股的效果,先上图。
二、实现心路历程
拿到这个需求,我就想,我靠,没搞过啊,这个怎么弄!仔细看,这好像就是上拉刷新、下拉加载呀,怎么实现?套两层recycleView?里面负责显示,外面一层负责动画?添加header 和 footer?然后增加动画,还有阻尼效果?不行不行,实现时间太长,不允许!找找网上有没有实现好的开源代码,然后:“仿选股宝选股头条上拉加载”等等,都没有。那只能自己实现了,然后自己再细看这玩意,越看越像之前ListView时代的PullToRefresh,然后我就想,找一个这样的上下组件,然后这种入场方式就自己实现:先上拉,数据出来之后,记录新加载的第一条数据,然后从该条开始,向上或者向下移动。最后和大佬说这个方案的时候,他给我提意见:你这样就弄得整个recycleView的逻辑很复杂,你还不如利用Fragment显示,让它处理数据显示,动画,进出场,recycleView只负责列表显示。瞬间茅塞顿开。
三、上代码
上下拉加载,我就自己不造轮子了,有很多大牛写的很好,找了几个,最终选中了https://www.cnblogs.com/zhujiabin/p/7425535.html 这个,我对他的代码做了小小的改动,增加下拉加载时,没有数据,显示到顶了,类似于上拉没有数据的那种效果,具体修改思路按照代码中底部加载完成字段isMore 增加isPreviousData字段控制,代码就不贴了,比较简单,稍微改下就行。
3.1具体使用
3.1.1 用一个Activity承接Fragment
PullRefreshActivity.java
public class PullRefreshActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pull_refresh);
BaseFragment fragment = new BaseFragment();
BaseFragment fragment2 = new BaseFragment();
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fl_root, PullRefreshFragment.newInstance(it))