美文网首页Android-2Android知识Android开发
Android中recycleview的下拉刷新和上滑加载功能实

Android中recycleview的下拉刷新和上滑加载功能实

作者: 昵称真难选 | 来源:发表于2017-04-30 04:15 被阅读883次

原文出自王艳涛的专栏转载请注明出处!

概述

RecycleView作为Android中目前最流行的列表控件,为其添加下拉刷新和上滑加载功能后可以更加方便的展示、刷新、加载数据,节省界面空间,提升用户体验,本文主要介绍Android中RecycleView的下拉刷新和上滑加载功能实现。

实现思路

下拉刷新:不需要RecycleView自身实现,在布局文件中将RecycleView控件放到androi的SwipeRefreshLayout控件中,运行时,实现SwipeRefreshLayout.OnRefreshListener接口即可。

上滑加载:上滑加载目前有两种实现方式:

  1. 隐式加载:监听RecycleView的滑动状态,在RecycleView的滑动过程中,如果当前屏幕上显示的最后一个Item(即能看到的列表中的最底下一个Item),是RecycleView所有Item的最后一个时,就开始执行加载操作。这种方式下,不会显示的告诉用户执行加载操作,可以让用户认为数据原来就是这么多,滑不到底。
  2. 显示加载:在实现RecycleView的Adapter动态加载多布局的功能后,如果屏幕上显示的最后一个Item(即能看到的列表中的最底下一个Item),是RecycleView所有Item的最后一个(这个Item加载的布局是加载更多的提示,可以是文本“正在加载”,也可以是进度条,这种动态加载多布局通过使用自行封装的MutiLayoutAdapter适配器实现),并且此时用户的手指依然在屏幕上,并保持滑动状态,则进行加载操作。其中RecycleView所有Item的数量是真实数据data.size()+1,多出来的一个Item是用来显示提示的。这种方式,可以显示的提示用户去主动加载更多数据。这两种方式各有自己的优缺点:
    • 当网络比较好时,加载数据的速度很快,第二种加载方式会显示的提示用户加载,在一定程度上回影响用户阅读的连贯性,第一种方式则不会,可以让用户保持连贯的阅读,不受影响;
    • 当网络不是太好,加载数据的速度比较慢时,第二种方式的优点就呈现出来了,让用户知道数据正在加载,请稍等一会,而第一种方式不会提示,容易让用户误解认为没有数据了,从而退出浏览。
    • 当联网加载数据时,如果用户对流量消耗比较敏感,第二种方式优点更大,除非用户手指依然屏幕上,并保持上滑状态时进行加载数据,否则不进行加载操作,避免自动加载数据引起用户对流量消耗的担心。
      具体使用哪种方式,就看项目具体情况和要求了。

下拉刷新实现

在布局文件中在RecycleView的外层包上一个SwipeRefreshLayout,具体的布局代码就不贴了,下面是下拉刷新的代码实现。

SwipeRefreshLayout swipeRefreshLayout= (SwipeRefreshLayout)findViewById(R.id.swipeRefreshLayout);
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
    @Override
    public void onRefresh() {
        if(!isLoading){
          isLoading = true;
          //刷新数据操作
          //……
          //刷新完成后,关闭SwipeRefreshLayout的刷新状态
          swipeRefreshLayout.setRefreshing(false);
          isLoading = false;    
        }
    }
});

上滑加载实现

下文使用的两种Adaper是自行封装的,和本文上滑加载逻辑没有关系,具体功能和实现请参看BaseAdapterMultiLayoutAdapter

隐式加载

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                //使用的封装的BaseAdapter适配器
                if (!isLoading && linearLayoutManager.
                  findLastVisibleItemPosition() == baseAdapter.getItemCount()-1){
                    //执行加载操作
                    isLoading = true;
                    //……
                    //执行完毕后
                    isLoading = false;
                }
            }
        });

显式加载

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
     @Override
     public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
         super.onScrollStateChanged(recyclerView, newState);
         //使用的封装的MultiLayoutAdapter适配器
         if (!isLoading
                 && newState == RecyclerView.SCROLL_STATE_DRAGGING//用户手指在屏幕上,并保持滑动状态
                 && linearLayoutManager.findLastVisibleItemPosition() == multiLayoutAdapter.getItemCount() -1){
             //执行加载操作
             isLoading = true;
             //……
             //执行完毕后
             isLoading = false;
         }
     }
 });

总结

通过实现下拉刷新和上滑加载功能后可以更加方便的展示、刷新、加载数据,节省界面空间,减少交互代价,提升用户体验。具体使用哪种上滑加载方式,可根据项目情况和要求进行选择。

相关文章

网友评论

  • 30d510f59682:隐式加载有bug,假如第一次进入界面,拿到数据不满一屏,会执行加载更多,再次拿第一页数据的,从而造成重复的。
    30d510f59682:有碰到一进入界面就会触发addOnScrollListener的方法没有

本文标题:Android中recycleview的下拉刷新和上滑加载功能实

本文链接:https://www.haomeiwen.com/subject/cebttxtx.html