推荐一个简洁的下拉刷新组件

下拉刷新和上拉加载是如今APP必备的一个功能,为此Android也提供了相应的组件,可是只有下拉刷新,并且定制度不高。为此实现了这个灵活的,简洁的下拉刷新组件。git

组件介绍

一个极简的组件,核心代码只是一个自定义View,代码不超过500行,是一个学习事件分发和View滚动机制的不错选择。虽然代码比较少,但却提供了完整功能。github

特色

  • 同时支持下拉刷新和上拉加载;
  • 支持触底自动加载;
  • 支持经常使用View;
  • 支持自定义头部和底部布局;

描述

  1. 该组件对全部View提供了下拉和上拉加载功能,具体使用哪一种模式可经过设置mode属性来实现:
// 下拉刷新和上拉加载都不可用
MODE_DISABLE(0),

// 只可下拉刷新
MODE_REFRESH(1),

// 只可上拉加载
MODE_LOAD_MORE(2),

// 同时支持下拉刷新和上拉加载
MODE_BOTH(3);
  1. 对AbsListView(如ListView, GridView)和RecycleView提供了触底加载机制,经过设置mSupportedTouchBottomLoad来实现开启,默认为开启状态;
  2. 经过示例代码对ListView, GridView, ScrollView, WebView, RecycleView, ViewPager, TextView进行了测试,均可正常工做;
  3. 该组件提供了自定义头部和底部布局的功能,既可经过设置监听来实现,也可经过重写RefreshLayout来实现统一风格的刷新组件。
refreshLayout.setOnRefreshListener(new RefreshLayout.OnRefreshListener() {
    @Override
    public void onRefresh(View headerView) {
        // 设置刷新中的布局样式
    }

    @Override
    public void onLoad(View footerView) {
        // 设置加载更多时的布局样式
    }
});

经过重写RefreshLayout中的几个方法实现统同样式的刷新组件:ide

public class MyRefreshLayout extends RefreshLayout {

    public MyRefreshLayout(Context context) {
        super(context);
    }

    public MyRefreshLayout(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public MyRefreshLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void addHeaderViewAndFooterView() {
        mHeaderView = View.inflate(getContext(), R.layout.item_my_header_layout, null);
        mFooterView = View.inflate(getContext(), R.layout.item_my_footer_layout, null);
        addView(mHeaderView, 0);
        addView(mFooterView, getChildCount());
    }

    @Override
    protected void showRefreshingLayout() {
        
    }

    @Override
    protected void showLoadingLayout() {
        
    }

    @Override
    protected void refreshingComplete() {
        
    }

    @Override
    protected void loadingComplete() {
        
    }

    @Override
    protected void resetRefreshLayout() {
        
    }

    @Override
    protected void resetLoadMoreLayout() {
        
    }
}

源码地址:

SimpleRefresh布局

相关文章
相关标签/搜索