推薦一個簡潔的下拉刷新組件

下拉刷新和上拉加載是如今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佈局

相關文章
相關標籤/搜索