Android开发中下拉刷新如何实现

 更新时间:2016年07月10日 15:21:44   投稿:lijiao  
这篇文章主要为大家详细介绍了Android开发中下拉刷新的实现方法,感兴趣的小伙伴们可以参考一下

因为最近的开发涉及到了网络读取数据,那么自然少不了的就是下拉刷新的功能,搜索的方法一般是自己去自定义ListView或者RecyclerView来重写OnTouch或者OnScroll方法来实现手势的监听然后播放动画最后刷新界面 

今天说的是一个Google官方提供的下拉刷新布局,名字叫做SwipeRefreshLayout,找到这个布局的时候真的是喜出望外啊,下面来记录一下它怎么用。 

这里放一下效果图先,就是下面这个小圈圈啦 

首先是需要把这个布局套在我们需要刷新的控件之外,这里是RecyclerView

<android.support.v4.widget.SwipeRefreshLayout
  android:id="@+id/reglost_srl"
  android:layout_width="match_parent"
  android:layout_height="match_parent">

  <android.support.v7.widget.RecyclerView
   android:id="@+id/reglost_rv"
   android:layout_width="match_parent"
   android:layout_height="match_parent" />

 </android.support.v4.widget.SwipeRefreshLayout>

当我们需要显示或者隐藏刷新这个小动画的时候,需要调用下面这个方法
 public void setRefreshing(boolean refreshing)
但是,如果是刚开始的时候我们要显示这个加载的动画,不能直接把true传入这个方法然后调用,因为我们在源代码中可以看到SwipeRefreshLayout中的一个名为mOriginalOffsetTop的变量没有被初始化,所以动画是可能显示不出来的,那么应该怎样来显示呢?用下面的方法 

refreshlayout.post(new Runnable() {
   @Override
   public void run() {
    refreshlayout.setRefreshing(true);
   }
  });

然后,我们还需要给动画结束后添加一个监听

 refreshlayout.setOnRefreshListener(this); 
@Override
 public void onRefresh() {
  refreshData(); // refresh the view
 } 

当数据加载完成了,把动画隐藏,很简单
refreshlayout.setRefreshing(false);
到这里,其实已经基本是全部的用法了,这个东西真的是方便,但是,不是就没有一点问题了,稍不注意,其实还是会遇到一些问题的。
 在网上的很多代码中,不少的开发者都喜欢在从网络加载数据前把数据集合清空,也就是在onRefresh方法中先调用data.clear(),但是这里会出现一个问题,如果正在加载的时候我们往上滑动界面,App就会直接Crash掉,看图 

这个问题其实也很简单因为如果我们把数据清空了,但是列表没有刷新,如果滑动产生的话就会去访问data中的数据,直接就越界了。
 所以正确的做法应该是先执行联网加载数据,当数据加载完了就清空集合,重新填入并刷新。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Android中网络框架简单封装的实例方法

    Android中网络框架简单封装的实例方法

    在本篇文章里小编给大家整理的是关于Android中网络框架简单封装的实例方法,需要的朋友们可以学习下。
    2020-03-03
  • Android利用FlexboxLayout轻松实现流动布局

    Android利用FlexboxLayout轻松实现流动布局

    flexbox是属于CSS的一种布局方案,可以简单、完整、响应式的实现各种页面布局。谷歌将其引入以提高复杂布局的能力。下面这篇文章主要给大家介绍了在Android中利用FlexboxLayout轻松实现流动布局的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-04-04
  • android相册选择图片的编码实现代码

    android相册选择图片的编码实现代码

    本篇文章主要介绍了android相册选择图片的编码实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Android基于Sqlite实现注册和登录功能

    Android基于Sqlite实现注册和登录功能

    这篇文章主要为大家详细介绍了Android基于Sqlite实现注册和登录功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Android实现清除应用缓存功能

    Android实现清除应用缓存功能

    这篇文章主要为大家详细介绍了Android实现清除应用缓存功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • Android中利用ViewHolder优化自定义Adapter的写法(必看)

    Android中利用ViewHolder优化自定义Adapter的写法(必看)

    下面小编就为大家带来一篇Android中利用ViewHolder优化自定义Adapter的写法(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • android 6.0 写入SD卡的权限申请实例讲解

    android 6.0 写入SD卡的权限申请实例讲解

    今天小编就为大家分享一篇android 6.0 写入SD卡的权限申请实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • Android  View移动的六种方法小结

    Android View移动的六种方法小结

    在android开发中,经常会遇到一个view需要它能够支持滑动的需求。下面通过本篇文章给大家介绍android view移动的六种方法,对android view移动相关知识感兴趣的朋友一起学习吧
    2015-12-12
  • SurfaceView播放视频发送弹幕并实现滚动歌词

    SurfaceView播放视频发送弹幕并实现滚动歌词

    这篇文章主要为大家详细介绍了SurfaceView播放视频发送弹幕并实现滚动歌词,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • Jetpack Compose实现对话框和进度条实例解析

    Jetpack Compose实现对话框和进度条实例解析

    对话框和进度条其实并无多大联系,放在一起写是因为两者的内容都不多,所以凑到一起,对话框是我们平时开发使用得比较多的组件,进度条的使用频率也很高,比如下载文件,上传文件,处理任务时都可以使用进度条
    2023-04-04

最新评论