Google下拉刷新组件SwipeRefreshLayout的使用

SwipeRefreshLayout组件是由Android SDK提供,已经被用于一些Android自己的应用程序(比如Gmail)的实现,并且SwipeRefreshLayout组件只接受一个子组件:即需要刷新的那个组件。它使用一个侦听机制来通知拥有该组件的监听器有刷新事件发生,换句话说我们的Activity必须实现通知的接口。该Activity负责处理事件刷新和刷新相应的视图。一旦监听者接收到该事件,就决定了刷新过程中应处理的地方。如果要展示一个“刷新动画”,它必须调用setRefrshing(true),否则取消动画就调用setRefreshing(false)。


下面我结合listView做一个简单的例子供大家参考学习

SwipeRefreshLayout配置起来非常简单,由于是SDK所提供,所以不需要添加依赖进项目,直接在xml文件中使用即可

布局文件如下(注意,SwipeRefreshLayout只接受一个子控件

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/swipe_refresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.zhuandian.msuic.pull_to_refresh.SwipeRefreshLayout">

    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

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

一定要注意不要把SwipeRefreshLayout的包名写错。


java代码如下:

package com.zhuandian.msuic.pull_to_refresh;


/**
 * Created by 谢栋 on 2016/12/25.
 */
public class SwipeRefreshLayout extends AppCompatActivity {

    private ListView listView;
    private android.support.v4.widget.SwipeRefreshLayout swipeRefresh;
    private ArrayAdapter<String> mAdapter;
    private List<String> mDatas;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_swipe_refresh_layout);

        listView = (ListView) findViewById(R.id.listview);
        swipeRefresh = (android.support.v4.widget.SwipeRefreshLayout) findViewById(R.id.swipe_refresh);

        mDatas = new ArrayList<>();
        loadDatas();
        mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mDatas);
        listView.setAdapter(mAdapter);
        //设置圆环动画的颜色 最多可设置4中颜色
        swipeRefresh.setColorSchemeResources(android.R.color.holo_blue_bright,
                android.R.color.holo_green_light,
                android.R.color.holo_orange_light,
                android.R.color.holo_red_light);
        //设置下拉刷新监听
        swipeRefresh.setOnRefreshListener(new android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
//                mDatas.add("刷新进来的数据"+(count++));
                new MyAsyncTask().execute();

            }
        });


    }


    private int count = 1;   //数据角标

    //模拟装载数据
    private void loadDatas() {
        for (int i = 0; i < 10; i++) {
            mDatas.add(String.format(Locale.CHINA, "被装载进%3d条数据", count));
            count++;
        }

    }


    /**
     * 异步任务类,下拉或者上拉时模拟请求数据
     */
    class MyAsyncTask extends AsyncTask<Void, Void, String> {

        @Override
        protected String doInBackground(Void... params) {

            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            loadDatas();
            return "success";
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            if ("success".equals(s)) {
                mAdapter.notifyDataSetChanged();
                swipeRefresh.setRefreshing(false);   //停止刷新动画
            }
        }
    }
}


在java代码中需要设置SwipeRefreshLayout下拉刷新的监听状态,或者根据需要配置头部动画的颜色,这里需要提下有些开发者可能迷惑在有些地方看到的SwipeRefreshLayout下拉刷新动画是类似一个进度条的加载动画,有些地方是一个圆形的,这是API版本所致,旧版本是进度条样式,新版本是圆环,大家知道即可,不必过于纠结

 

新旧版本动画对比如下:

                                        



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值