最新的RecyclerView下拉刷新跟上拉加载控件

最新的RecyclerView下拉刷新和上拉加载控件

【链接】Android智能下拉刷新框架-SmartRefreshLayout

http://blog.csdn.net/yunyu5120/article/details/74451961

 

使用SmartRefreshLayout控件,可实现最先进的几种牛逼的加载和刷新效果

最原始的效果:

                <com.scwang.smartrefresh.layout.SmartRefreshLayout
                    android:id="@+id/mRefreshLayout"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">
                //加了这个,就是下拉刷新最初头部效果了
                    <com.scwang.smartrefresh.layout.header.ClassicsHeader
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content" />

                   <RecyclerView   android:id="@+id/mRecyclerView"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent" />
                  //这个是底部上拉加载的效果了,
                    <com.scwang.smartrefresh.layout.footer.ClassicsFooter
                        android:id="@+id/mClassicsFooter"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content" />
                </com.scwang.smartrefresh.layout.SmartRefreshLayout>

 

代码实现:

private RefreshLayout refreshLayout; 
refreshLayout=(RefreshLayout)findViewById(R.id.mSwipeRefreshLayout);


        refreshLayout.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(RefreshLayout refreshlayout) {
                //刷新
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        currpage = 1;
                        //结束后停止刷新
                        refreshData();
                    }
                }, 100);
                refreshlayout.finishRefresh(1000);
            }
        });
        refreshLayout.setOnLoadmoreListener(new OnLoadmoreListener() {
            @Override
            public void onLoadmore(final RefreshLayout refreshlayout) {
                refreshlayout.finishLoadmore(1000);
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        switch (status) {
                            case 0:
                                currpage++;
                                new StartAsyncTask().execute("initPostInfo");
                               
                                    mAdapter.setNewData(mDetailList);
                                    mAdapter.loadMoreComplete();
                                
                                break;
                            case 1:
                                currpage++;
                                new StartAsyncTask().execute("initPostInfo");
                               
                                    mAdapter.setNewData(mDetailList);
                                    mAdapter.loadMoreEnd();
                               
                                break;
                            case 2:
                              
                                    mAdapter.loadMoreFail();
                              
                                break;
                        }

                    }
                }, 100);
            }
        });

 

如果头部和底部,不用这样的效果,可以去掉,然后自己设置想要的效果,如果项目没特别要求,这样的效果已经满足了大多数的功能需求了

 

也可以设置全局的效果

这样就可以实现整个项目的下拉效果

public class MyApp extends Application{

    static {//static 代码段可以防止内存泄露
        //设置全局的Header构建器
        SmartRefreshLayout.setDefaultRefreshHeaderCreater(new DefaultRefreshHeaderCreater() {
            @Override
            public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
                layout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);//全局设置主题颜色
//                return new ClassicsHeader(context).setSpinnerStyle(SpinnerStyle.Translate);//平行移动 特点: 最常见,HeaderView高度不会改变,
//                return new ClassicsHeader(context).setSpinnerStyle(SpinnerStyle.FixedBehind);//固定在后面 特点:不会上下移动,HeaderView高度不会改变(类似微信浏览器效果)
//                return new ClassicsHeader(context).setSpinnerStyle(SpinnerStyle.FixedFront);//固定在前面 特点:不会上下移动,HeaderView高度不会改变
                return new ClassicsHeader(context).setSpinnerStyle(SpinnerStyle.Scale);//拉伸形变 特点:在下拉和上弹(HeaderView高度改变)时候,会自动触发OnDraw事件
            }
        });
        //设置全局的Footer构建器
        SmartRefreshLayout.setDefaultRefreshFooterCreater(new DefaultRefreshFooterCreater() {
            @Override
            public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {
                //指定为经典Footer,默认是 BallPulseFooter
//                return new ClassicsFooter(context).setSpinnerStyle(SpinnerStyle.Translate);
//                return new ClassicsFooter(context).setSpinnerStyle(SpinnerStyle.FixedBehind);
//                return new ClassicsFooter(context).setSpinnerStyle(SpinnerStyle.FixedFront);
                return new ClassicsFooter(context).setSpinnerStyle(SpinnerStyle.Scale);
            }
        });
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }
}

 

 下面这个布局可以实现列表添加一个头部广告位,

 <com.scwang.smartrefresh.layout.SmartRefreshLayout
        android:id="@+id/mRefreshLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        >
        <pl.droidsonroids.gif.GifImageView
            android:layout_width="match_parent"
            android:layout_height="150dp"
            android:scaleType="centerCrop"
            android:src="@mipmap/gif_header_repast"/>
        <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"
            android:orientation="vertical">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="100dp"
                android:gravity="center"
                android:text="我就是boos要求加上的广告条啦"/>


        <android.support.v7.widget.RecyclerView
            android:id="@+id/mRecyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
        </LinearLayout>
    </com.scwang.smartrefresh.layout.SmartRefreshLayout>