工作总结|Android 自定义列表刷新控件

Android 中上拉加载和下拉刷新都是很常用的控件,所以在 Android 后续版本中提供了 PullToRefresh 这个控件,以方便开发者很便捷的集成下拉刷新功能。而对于上拉加载功能,仍然需要开发者自己监听 ListView 或者 RecyclerView 滑动状态来实现自己的上拉加载功能。因此在最近猿最近基于 PullToRefresh 与 RecyclerView 自己试做了一个控件:EasyRefreshView,来方便开发者集成相关功能。

控件截图

使用说明

1、AndroidStudio 集成方法

    compile 'com.ray.easyrefreshview:easy-refresh-view:0.5.9'

2、Layout 布局文件声明

    <com.ray.easyrefreshview.EasyRefreshView
        android:id="@+id/user_elv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        easyrefreshview:layoutType="linear"
        easyrefreshview:normalLayout="@layout/item_normal"
        easyrefreshview:loadingLayout="@layout/foot_loading"
        easyrefreshview:nomoreLayout="@layout/foot_loading_nomore_data"
        easyrefreshview:errorLayout="@layout/foot_loading_error"/>

控件支持用户自定义相关 Item Layout ,分别是正常显示状态、等待显示状态、无更多数据状态、加载错误状态,集成者可以在 bindAdapter 中的 onCreate 回调方法中去创建对应 layout 的 Holder,并在 onBind 回调方法对相应的 View 进行操作。

3、控件绑定 Adapter 并自定义相关 ViewHolder

    easyRefreshView.bindAdapter(new EasyRefreshHolderCallBack() {
        @Override
        public RecyclerView.ViewHolder onCreateNormal(View view) {
            //return new NormalHolder(view);
        }

        @Override
        public void onBindNormal(RecyclerView.ViewHolder holder, int position) {
            super.onBindNormal(holder, position);
            //todo
        }
    });

4、 控件滑动到顶部和底部的两种回调

当列表滑动到顶部和底部时,分别会有 onTopLoadStarted 与 onBottomLoadStarted 回调触发,继承者可以在这两个回调中进行下拉加载与上拉刷新进行数据更新。

    public void onTopLoadStarted() {
        list.clear();
        startRxLoad(0);
    }

    public void onBottomLoadStarted(int position) {
        if (position >= mTotalCount) {
            erv.setFootViewState(EasyRefreshAdapter.FOOT_STATE_LOAD_NOMORE);
            return;
        }
        erv.setFootViewState(EasyRefreshAdapter.FOOT_STATE_LOADING);
        startRxLoad(position + 1);
    }

目前控件已开源至GitHub(相关链接) , 相关 Demo 使用数据来源豆瓣电影开放 API ,使用 Retrofit2 进行网络请求,并利用RxJava 对进行了部分逻辑处理,欢迎 Fork 和 Star ,如果有改进意见也可以提给猿,猿会在后续版本中加以改进。

O(∩_∩)O谢谢

推荐阅读更多精彩内容