SmartRefreshLayout使用中遇坑总结

实习过程中,需要实现一个下拉刷新和上拉加载更多的页面,Gollgle。在开发过程中遇到好多坑,主要还是因为自己经验不足。
先放该第三方库的GitHub地址 https://github.com/scwang90/SmartRefreshLayout/tree/master
一、因为该第三方库还比较智能,提供了很多方法,因此对每个方法的具体功能要首先理解清楚,例如,该库提供了很多加载完成时使用的方法,但是每一个方法是针对不同情况使用的。就因为在开始时没有对这些重载的每一个finishLoadMore()方法好好理解,在开发过程中浪费了好多时间。还有就是setNoMoreData(true)这个方法,在没有更多数据,即最后一页时调用,并将参数传为 true。最重要的是要记得在不是最后一页时,记得要把状态恢复过来,即将参数传为 false.
下面是在此次开发中用到的比较重要的方法,

    /*
       这几个方法是比较重要的
    */
    // 这两个方法是在加载成功并且还有数据的情况下调用的    
    refreshLayout.finishRefresh();//结束刷新                                         
    refreshLayout.finishLoadMore();//结束加载
    // 这两个方法是在加载失败时调用的
    refreshLayout.finishRefresh(false);//结束刷新(刷新失败)
    refreshLayout.finishLoadMore(false);//结束加载(加载失败)
    // 这个方法是在最后一页,没有更多数据时调用的,会在页面底部标记没有更多数据 
    refreshLayout.finishLoadMoreWithNoMoreData();//完成加载并标记没有更多数据 1.0.4
    // 这个方法最重要,当在最后一页调用完上一个完成加载并标记没有更多数据的方法时,需要将refreshLayout的状态更改为还有更多数据的状态,此时就需要调用此方法,参数为false代表还有更多数据,true代表没有更多数据
    refreshLayout.setNoMoreData(false);//恢复没有更多数据的原始状态 1.0.5


    // 这里需要注意这几个结束加载和结束刷新的方法,分好几种使用的情况,可以在不同的情况下使用
    /**
     * 完成刷新
     * @return RefreshLayout
     */
    RefreshLayout finishRefresh();

    /**
     * 完成刷新
     * @param delayed 开始延时
     * @return RefreshLayout
     */
    RefreshLayout finishRefresh(int delayed);

    /**
     * 完成加载
     * @param success 数据是否成功刷新 (会影响到上次更新时间的改变)
     * @return RefreshLayout
     */
    RefreshLayout finishRefresh(boolean success);

    /**
     * 完成刷新
     * @param delayed 开始延时
     * @param success 数据是否成功刷新 (会影响到上次更新时间的改变)
     * @return RefreshLayout
     */
    RefreshLayout finishRefresh(int delayed, boolean success);

    /**
     * 完成加载
     * @return RefreshLayout
     */
    RefreshLayout finishLoadMore();

    /**
     * 完成加载
     * @param delayed 开始延时
     * @return RefreshLayout
     */
    RefreshLayout finishLoadMore(int delayed);

    /**
     * 完成加载
     * @param success 数据是否成功
     * @return RefreshLayout
     */
    RefreshLayout finishLoadMore(boolean success);

    /**
     * 完成加载
     * @param delayed 开始延时
     * @param success 数据是否成功
     * @param noMoreData 是否有更多数据
     * @return RefreshLayout
     */
    RefreshLayout finishLoadMore(int delayed, boolean success, boolean noMoreData);

    /**
     * 完成加载并标记没有更多数据
     * @return RefreshLayout
     */
    RefreshLayout finishLoadMoreWithNoMoreData();

二、对头布局和底部局界面的修改。
可以有两种修改方法,一个是在资源文件中将默认的值改了,另一个是在JAVA代码中改。此处我们看下这些标记文字设置的源码。

// 这是REFRESH_HEADER_PULLING的初始化
// 这是为REFRESH_HEADER_PULLING赋值,我们可以看出,如果刚开始REFRESH_HEADER_PULLING为空的话,就为它赋值为
//context.getString(R.string.srl_header_pulling),默认的是“下拉可以刷新”,因此如果,我们想修改文字,
//可以有两种方法,一,我们为REFRESH_HEADER_PULLING赋值,即在代码中写ClassicsHeader.REFRESH_HEADER_PULLING = "下拉释放刷新",
//二,在XML文件中将R.string.srl_header_pulling对应的值改为“下拉释放刷新”
public static String REFRESH_HEADER_PULLING = null;//"下拉可以刷新";
if (REFRESH_HEADER_PULLING == null) {
    REFRESH_HEADER_PULLING = context.getString(R.string.srl_header_pulling);
}

三,还有一个方法需要注意,引用该第三方库时,在调用finishLoadMore() 方法时,默认会弹出 加载完成的白框,如果不想弹出这个白框,可以使用下面的方法

footer.setFinishDuration(500)//参数很明显是时间参数,将参数设为0,就没用白框了

四、在此次开发中,还遇到一个坑是,网上在设置下拉刷新和上拉加载监听时,多使用Handler.postDelayed(Runnable runnable, int time)这个方法来模拟数据加载的过程。在前人的代码中,在加载数据时,仍然使用了这个方法,导致每次加载数据都会出现延时。

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: b'smartrefreshlayout' 是一个 Android 上的 UI 控件库,用于实现下拉刷新和上拉加载更多功能。使用时需要在项目中导入对应的库文件,并在布局文件中添加相关控件元素。可以通过设置属性和监听器实现定制化的下拉刷新和上拉加载更多效果。 ### 回答2: SmartRefreshLayout 是一个强大的下拉刷新和上拉加载更多的Android控件库,这个库是由“scwang90”所开发,并推广到了全世界。它使用简单,功能丰富,而且提供了很多的定制选项,可以为不同的使用场景提供相应的适配方案。使用SmartRefreshLayout,我们可以轻松地实现下拉刷新和上拉加载更多的功能,感受到更加流畅丝滑的用户体验。 使用 SmartRefreshLayout 可以实现如下操作: 1. 下拉刷新 当我们在列表向下滑动的时候,可以发现下拉刷新功能会自动启动。这个库提供了很多定制的选项,可以根据个人的需求来进行配置。譬如,可以通过设置文字,颜色、动画等定制化内容来定制自己的下拉刷新样式。 2. 上拉加载更多 SmartRefreshLayout 还支持上拉加载更多的功能,可以在滑动到列表末尾时自动启动。我们只需要在适配器中添加数据,在加载完毕后再调用.smartRefreshLayout.finishLoadMore(loadedCount, true/false))可以告诉适配器数据是否已加载完毕。与下拉刷新样式一样,我们同样可以通过添加文字、颜色、动画来适配上拉加载更多的样式。 3. 自定义头部 SmartRefreshLayout 还允许我们自定义刷新头部,因此可以使得刷新头部看起来更加个性化和漂亮。我们只需在 xml 文件中添加 refreshHeader 对象,就可以实现自定义的刷新头部。 4. 自定义回弹效果 SmartRefreshLayout 还提供了一些自定义的回弹效果,可以根据自己的需求来进行设置。 譬如,可以设置下拉阻尼,使得下拉过程更加流畅自然,滑动更加舒适。 总之,SmartRefreshLayout 是一款非常强大的下拉刷新控制库,可以为我们的项目提供更好的用户体验。在使用的过程中,我们只需要定义好适配器、设置相应的监听器就可以实现自定义的下拉刷新和上拉加载更多的效果,是一个非常值得大家尝试使用和学习的库。 ### 回答3: SmartRefreshLayout 是一个强大的Android库,为用户提供了类似于下拉刷新和上滑加载更多的功能。该库提供了很多有用的特性,例如:多种刷新风格、嵌套滚动支持、自动加载数据、自定义刷新和加载视图等等。 使用 SmartRefreshLayout 非常简单,它只需要在布局文件中添加一个 SmartRefreshLayout 控件,然后将需要刷新和加载更多的视图放在 SmartRefreshLayout 中即可。在Java代码中,使用 SmartRefreshLayout 提供的回调方法即可完成相应的刷新或加载更多操作。 SmartRefreshLayout 提供了 14 种刷新风格。用户可以通过SmartRefreshLayout中的 setRefreshHeader() 和 setRefreshFooter() 方法来设置自己的刷新和加载视图。此外,SmartRefreshLayout 还允许用户设置自动刷新和自动加载,当需要自动刷新或加载时,可以通过 setEnableAutoLoadMore() 或 setEnableAutoRefresh() 方法来实现。 此外,SmartRefreshLayout 还支持嵌套滚动,因此在嵌套滚动的场景中,SmartRefreshLayout 可以很好地支持滑动事件。 SmartRefreshLayout 同样也提供了丰富的自定义选项,允许用户为刷新和加载视图添加自定义动画、背景、字体大小、颜色等等。SmartRefreshLayout 还支持为不同状态下的刷新和加载视图设置不同的自定义选项,从而实现更丰富的刷新和加载视图效果。 总体来说,SmartRefreshLayout 是一款非常强大、灵活和易用的 Android 库,可以方便地实现下拉刷新和上滑加载更多的功能。无论是在单页面应用程序还是多页面应用程序中,SmartRefreshLayout 都是一种强大的工具。此外,SmartRefreshLayout 还可以配合其他开源库使用,如 Retrofit、OkHttp 等,极大地提高了 Android 开发效率。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值