2018年1月9日更新
我之前的文章提及过万能适配器
我们当时提及过这个万能适配器要是能搭配刷新库一起使用就更好了,现在最热的刷新库要属SmartRefreshLayout了,附上SmartRefreshLayout的github地址
前期准备已经做完了,现在要看下我们的效果
1 导入三方库
compile 'com.zhy:base-adapter:3.0.3' //万能适配器仅针对Listview
compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.4-6' //智能刷新库目前最新版
2 自定义Adapter
public class MyAdapter extends CommonAdapter<String> {
public MyAdapter(Context context, int layoutId, List<String> datas) {
super(context, layoutId, datas);
}
@Override
protected void convert(ViewHolder vh, String item, int position) {
vh.setText(R.id.tv, item);
}
}
3 MainActivity
package com.universalrefresh;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.DefaultRefreshFooterCreater;
import com.scwang.smartrefresh.layout.api.DefaultRefreshHeaderCreater;
import com.scwang.smartrefresh.layout.api.RefreshFooter;
import com.scwang.smartrefresh.layout.api.RefreshHeader;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.footer.BallPulseFooter;
import com.scwang.smartrefresh.layout.footer.ClassicsFooter;
import com.scwang.smartrefresh.layout.header.BezierRadarHeader;
import com.scwang.smartrefresh.layout.header.ClassicsHeader;
import com.scwang.smartrefresh.layout.header.FalsifyHeader;
import com.scwang.smartrefresh.layout.listener.OnLoadmoreListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private List<String> list;
private ListView listView;
private SmartRefreshLayout refreshLayout;
private MyAdapter myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listview);
refreshLayout = (SmartRefreshLayout) findViewById(R.id.slayout);
initData();
myAdapter = new MyAdapter(this,R.layout.item,list);
listView.setAdapter(myAdapter);
refreshLayout.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(RefreshLayout refreshlayout) {
refreshLayout.finishRefresh(2000);//刷新的回调方法
}
});
refreshLayout.setOnLoadmoreListener(new OnLoadmoreListener() {
@Override
public void onLoadmore(RefreshLayout refreshlayout) {
refreshLayout.finishLoadmore(2000);//加载更多
}
});
SmartRefreshLayout.setDefaultRefreshHeaderCreater(new DefaultRefreshHeaderCreater() {
@NonNull
@Override
public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
return new ClassicsHeader(context);
}
});
SmartRefreshLayout.setDefaultRefreshFooterCreater(new DefaultRefreshFooterCreater() {
@NonNull
@Override
public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {
return new ClassicsFooter(context);
}
});
}
private void initData() {
list = new ArrayList<>();
for(int i=0;i<20;i++){
list.add("我是第" + i);
}
}
}
项目实战
在我的项目中有一个需求是:
AB两个页面但是需要不一样的上拉加载和下拉刷新的效果,因为SmartRefeshLayout设置Header和Footer是全局设置的,我一直认为是不可以更改的,只能统一
其实的话:
刚开始A页面设置A样式,跳转到B页面设置成了B样式,这样B页面跳转到非A页面都会显示B样式,所以你需要在B页面跳转到其他页面前把样式改为A样式。
@Override
protected void onPause() {
super.onPause();
SmartRefreshLayout.setDefaultRefreshHeaderCreater(new DefaultRefreshHeaderCreater() {
@NonNull
@Override
public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
return new ClassicsHeader(context);
}
});
}