SwipeRefreshLayout android 自带 下拉刷新

效果
这里写图片描述

activity.xml //我使用recyclerView 作为 SwipeRefreshLayout ,recyclerView 可用 ListView代替
注:SwipeRefreshLayout 只能有一个孩子

<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity" >

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

        <android.support.v7.widget.RecyclerView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

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

</LinearLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private SwipeRefreshLayout swipeRefreshLayout;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        swipeRefreshLayout = findViewById(R.id.swipeRefreshLayout);
        swipeRefreshLayout.setProgressBackgroundColorSchemeResource(android.R.color.white);
        // 设置下拉进度的主题颜色
        swipeRefreshLayout.setColorSchemeResources(R.color.colorAccent, R.color.colorPrimary, R.color.colorPrimaryDark);
        // 下拉时触发SwipeRefreshLayout的下拉动画,动画完毕之后就会回调这个方法
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                // 开始刷新,设置当前为刷新状态
                swipeRefreshLayout.setRefreshing(true);
                // 这里是主线程
                // 一些比较耗时的操作,比如联网获取数据,需要放到子线程去执行
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(MainActivity.this, "刷新数据", Toast.LENGTH_SHORT).show();
                        // 加载完数据设置为不刷新状态,将下拉进度收起来
                        swipeRefreshLayout.setRefreshing(false);
                    }
                }, 1200);
            }
        });
    }
}

SwipeRefreshLayout 扩展

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

  2. setColorSchemeResources(int… colorResIds)
    设置下拉进度条的颜色主题,参数为可变参数,并且是资源id,可以设置多种不同的颜色,每转一圈就显示一种颜色。

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

  4. setProgressBackgroundColorSchemeResource(int colorRes)
    设置下拉进度条的背景颜色,默认白色。

  5. setRefreshing(boolean refreshing)
    设置刷新状态,true表示正在刷新,false表示取消刷新。

  6. setEnable(true)下拉刷新将不可用。

其他博客参考地址
https://blog.csdn.net/lmj623565791/article/details/24521483

猜你喜欢

转载自blog.csdn.net/qq_38340601/article/details/82223545