下拉刷新和上拉加载是如今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() { } }