下拉刷新和上拉加載是如今APP必備的一個功能,爲此Android也提供了相應的組件,可是隻有下拉刷新,並且定製度不高。爲此實現了這個靈活的,簡潔的下拉刷新組件。git
一個極簡的組件,核心代碼只是一個自定義View,代碼不超過500行,是一個學習事件分發和View滾動機制的不錯選擇。雖然代碼比較少,但卻提供了完整功能。github
// 下拉刷新和上拉加載都不可用 MODE_DISABLE(0), // 只可下拉刷新 MODE_REFRESH(1), // 只可上拉加載 MODE_LOAD_MORE(2), // 同時支持下拉刷新和上拉加載 MODE_BOTH(3);
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() { } }