Android SwipeRefreshLayout下拉刷新

1.介绍:使用SwipeRefreshLayout可以实现下拉刷新,前提是布局里需要包裹一个可以滑动的子控件(比如RecyclerView),

即想要实现下拉刷新的控件要放到SwipeRefreshLayout中,然后在代码里设置OnRefreshListener设置监听,最后在监听里设置

刷新时事件。

2.方法介绍

    (1)isRefreshing():判断当前的状态是否是刷新状态。

    (2)setColorSchemeResources(int... colorResIds):

            设置下拉进度条的颜色主题,参数为可变参数,并且是资源id,可以设置多种不同的颜色,最多设置四种,每转一圈就显示一种颜色。

    (3)setOnRefreshListener(SwipeRefreshLayout.OnRefreshListener listener):

            设置监听,需要重写onRefresh()方法,顶部下拉时会调用这个方法,在里面实现请求数据的逻辑及设置下拉进度条消失

    (4)setProgressBackgroundColorSchemeResource(int colorRes)

            设置下拉进度条的背景颜色,默认白色。

    (5)setRefreshing(boolean refreshing)

            设置刷新状态,true表示正在刷新,false表示取消刷新。

    (6)isRefreshing():检查是否处于刷新状态

3.布局文件

<!--下拉刷新-->
        <android.support.v4.widget.SwipeRefreshLayout
            android:id="@+id/design_rl_swirl"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">

            <!--layout_behavior指定布局行为-->
            <android.support.v7.widget.RecyclerView
                android:id="@+id/design_rl_recy_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_behavior="@string/appbar_scrolling_view_behavior">

            </android.support.v7.widget.RecyclerView>
        </android.support.v4.widget.SwipeRefreshLayout>

4.设置监听

swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.design_rl_swirl);
swipeRefreshLayout.setColorSchemeColors(getResources().getColor(R.color.colorAccent));
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {

            @Override
            public void onRefresh() {
                refreshFruit();    //响应的刷新逻辑
            }
        });

一般onRefresh中是去网络请求最新的数据,再讲数据显示出来

private void refreshFruit(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                //切换到主线程
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        initFruit();
                        fruitAdapter.notifyDataSetChanged();
                        swipeRefreshLayout.setRefreshing(false);        //刷新结束,隐藏进度条
                    }
                });
            }
        }).start();
    }

猜你喜欢

转载自blog.csdn.net/jinmie0193/article/details/80738981