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

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);
            }
        });
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值