Android移动开发-下拉刷新SwipeRefreshLayout的实现

现在的社交软件如微博、微信朋友圈以及QQ空间等都提供下拉刷新的功能,把页面整体下拉即可触发页面刷新操作。Android提供了下拉刷新控件SwipeRefreshLayout,可用于简单的下拉刷新。

下面是SwipeRefreshLayout的常用方法说明。

->setOnRefreshListener:设置刷新监听器。需要重写监听器 OnRefreshListener 的 onRefresh 方法,该方法在下拉松开时触发。
->setRefreshing:设置刷新的状态。true表示正在刷新,false表示结束刷新。
->isRefreshing:判断是否正在刷新。
->setColorSchemeColors:设置进度圆圈的圆环颜色。
->setProgressBackgroundColorSchemeColor:设置进度圆圈的背景颜色。
->setProgressBackgroundColorSchemeColor:设置进度圆圈的背景颜色。
->setProgressViewOffset:设置进度圆圈的偏移量。
->setDistanceToTriggerSync:设置手势向下滑动多少距离才会触发刷新操作。

P.S. SwipeRefreshLayout节点下面只能有一个直接子视图。如果有多个直接子视图,那么只会展示第一个子视图,后面的子视图将不予展示。这个直接子视图必须允许滚动,比如:ScrollView、ListView、GridView、RecyclerView等。如果不是这些视图,就不支持滚动,更不支持下拉刷新。

  • layout/activity_swipe_refresh.xml界面布局代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="5dp">

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

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/tv_simple"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:paddingTop="10dp"
                android:text="这是一个简单视图"
                android:textColor="#000000"
                android:textSize="17sp" />
        </ScrollView>
    </android.support.v4.widget.SwipeRefreshLayout>

</LinearLayout>
  • SwipeRefreshActivity.java逻辑代码如下:
package com.fukaimei.swiperefresh;

import android.os.Bundle;
import android.os.Handler;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

public class SwipeRefreshActivity extends AppCompatActivity implements OnRefreshListener {

    private TextView tv_simple;
    private SwipeRefreshLayout srl_simple;

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

        tv_simple = (TextView) findViewById(R.id.tv_simple);
        srl_simple = (SwipeRefreshLayout) findViewById(R.id.srl_simple);
        srl_simple.setOnRefreshListener(this);
        //旧版用下面的setColorScheme设置进度条颜色
        //srl_simple.setColorScheme(R.color.red, R.color.orange, R.color.green, R.color.blue);
        //新版用下面的setColorSchemeResources设置进度圆圈颜色
        srl_simple.setColorSchemeResources(
                R.color.red, R.color.orange, R.color.green, R.color.blue);
        //旧版v4包中无下面三个方法
//      srl_simple.setProgressBackgroundColorSchemeResource(R.color.black);
//      srl_simple.setProgressViewOffset(true, 0, 50);
//      srl_simple.setDistanceToTriggerSync(100);
    }

    @Override
    public void onRefresh() {
        tv_simple.setText("正在刷新");
        mHandler.postDelayed(mRefresh, 2000);
    }

    private Handler mHandler = new Handler();
    private Runnable mRefresh = new Runnable() {
        @Override
        public void run() {
            tv_simple.setText("刷新完成");
            srl_simple.setRefreshing(false);
        }
    };

}
  • Demo程序运行效果界面截图如下:

这里写图片描述

这里写图片描述


发布了72 篇原创文章 · 获赞 154 · 访问量 23万+

猜你喜欢

转载自blog.csdn.net/fukaimei/article/details/78457307