SwipeToLoadLayout 是一款很棒的支持下拉刷新,上拉加载的框架,Api调用友好,容易上手。
github 地址 : https://github.com/Aspsine/SwipeToLoadLayout
在使用过程中我们发现,SwipeToLoadLayout 的onRefresh() 回调是没有参数的,
那么在这样一个场景中,在一个fragment 中有一个viewpager ,ViewPager 有含有若干个SwipeToLoadLayout (此时在fragment类中)
这时候每个LoanLayout 如果都注册监听时传入this的话,那么他们都会执行同一个onRefresh()方法,如果我们有不同的请求接口,这时就不好判断到底是那个界面需要哪个接口的数据了!
怎么办呢?这时候我们可以将SwipeToLoadLayout 进行一下包装,在onRefresh()方法执行时调用一下我们自己注册的监听器,然后将SwipeToLoadLayout 作为参数传递出去,那么在fragment使用SwipeToLoadLayout 的时候,注册我们包装后的接口 ,就可以在回调中轻松的判断,请求刷新/加载的是哪一个SwipeToLoadLayout 了
伪代码如下:
public class ListLayout extends FrameLayout implementsOnRefreshListener {
public ListLayout(Context context, AttributeSet attrs) {
super(context, attrs);
setOnRefreshListener(this);
}
/**
* 下拉刷新
*/
@Override
public void onRefresh() {
if (changeListener != null) {
changeListener.onRefresh(this);
}
}
}
@Override
protected void setListener() {
mListLayout.setChangeListener(this);
}
@Override
public void onRefresh(ListLayout listLayout) {
}