注:本文方法只适合于RecyclerView的LinearLayoutManager的方式
思路:
在RecyclerView中设置滚动监听setOnScrollListener(),获得到上拉操作后调用我们Adapter中上拉状态参数,最后刷新完成显示功能;
直接上代码,先在Activity中给RecyclerView设置滚动监听:
- //RecyclerView滑动监听
- demo_recycler.setOnScrollListener(new RecyclerView.OnScrollListener() {
- @Override
- public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
- super.onScrollStateChanged(recyclerView, newState);
- if (newState ==RecyclerView.SCROLL_STATE_IDLE && lastVisibleItem + 1 ==adapter.getItemCount()) {
- new Handler().postDelayed(new Runnable() {
- @Override
- public void run() {
- List<String> newDatas = new ArrayList<String>();
- for (int i = 0; i< 5; i++) {
- int index = i +1;
- newDatas.add("more item" + index);
- }
- adapter.addMoreItem(newDatas);
- }
- },1000);
- }
- }
- @Override
- public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
- super.onScrolled(recyclerView,dx, dy);
- lastVisibleItem =linearLayoutManager.findLastVisibleItemPosition();
- }
- });
整个RefreshFootAdapter完整代码如下:
该Adaper中我还定义一个changeMoreStatus()方法和两个字符串常量可以来进行修改FootView中字符串提醒文本的。
7.整体Activity中还设置监听了RecyclerView的滚动事件, 代码和第一个例子差不多,不过RecyclerView需要设置这边的Adapter了,demo_recycler.setAdapter(adapter= new RefreshFootAdapter(this));
查看代码之后,大家肯定也发现在onScrollStateChanged()方法中,Adapter.addMoreItem()和Adapter.changeMoreStatus()方法内部都调用了notifyDataSetChanged()方法,也就是说这边刷新了两次,针对这个问题,大家可以把第二个方法放入到addMoreItem()内部去,调用一次刷新操作接口。同时也可以自己按照实际需求进行优化。
8.运行效果如下: