SwipeRefreshLayout基本使用

   在android的support.V4包中,提供了一个下拉刷新的控件:SwipeRefreshLayout。使用该控件可以实现知乎上的下拉刷新效果。首先来看一下这个类的继承关系。

从这个继承关系,可以看到SwipeRefreshLayout是一个ViewGroup,这个ViewGroup只有一个子view,便是我们需要刷新的控件。下面是一个简单的例子演示一下如何使用该控件。


布局文件:

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swiperefresh"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

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

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

主actiivty.java

package com.gearmotion.app.swiperefreshlayoutmotion;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.List;

import butterknife.Bind;
import butterknife.ButterKnife;

public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {

    //使用butterknife这个框架来初始化view,可以省去一系列的findeviewbyId()方法的调用
    @Bind(R.id.swiperefresh)
    SwipeRefreshLayout mSwipeRefreshLayout;
    @Bind(R.id.listview)
    ListView mListView;
    private List<String> mData;
    private ArrayAdapter<String> mAdapter;
    private static final int FLAG = 0x01;
    private Handler mHandler = new Handler() {
        @Override
        public void dispatchMessage(Message msg) {
            int what = msg.what;
            if (what == FLAG) {
                mData.add("fruit");
                mAdapter.notifyDataSetChanged();
                //处理完事物之后必须调用该函数,取消加载动画
                mSwipeRefreshLayout.setRefreshing(false);
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        initData();
        bindData();
    }

    private void initData() {
        mData = new ArrayList<String>();
        mData.add("apple");
        mData.add("pear");
        mData.add("watermelon");
        mData.add("orange");
        mData.add("banana");
    }

    private void bindData() {
        mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,
                android.R.id.text1, mData);
        mListView.setAdapter(mAdapter);
        //设置监听事件
        mSwipeRefreshLayout.setOnRefreshListener(this);
    }

    @Override
    public void onRefresh() {
        Message msg = Message.obtain();
        msg.what = FLAG;
        //延长动画效果
        mHandler.sendMessageDelayed(msg, 4000);
    }
}

实现的效果如下:



原文地址:https://www.cnblogs.com/summerpxy/p/13648344.html