您的位置:首页 > 编程语言

SmartRefreshLayout+CommonAdapter打造上拉加载下拉刷新界面

2017-08-26 11:42 369 查看
2018年1月9日更新


我之前的文章提及过万能适配器

万能适配器(一)

万能适配器(二)

我们当时提及过这个万能适配器要是能搭配刷新库一起使用就更好了,现在最热的刷新库要属SmartRefreshLayout了,附上SmartRefreshLayout的github地址

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);
}
});
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐