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)这个方法来模拟数据加载的过程。在前人的代码中,在加载数据时,仍然使用了这个方法,导致每次加载数据都会出现延时。

猜你喜欢

转载自blog.csdn.net/mawei7510/article/details/82629722