實現SwipeRefreshLayout首次進入自動刷新


看到了Android版知乎實現了這種效果,就自己也實現了一下。

先來一張效果圖

swipeRefrsh.gif

實現方式:

方法一、

①在onWindowFocusChanged()方法中,設置為刷新狀態為true

@Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        mSwipeRefreshLayout.setRefreshing(true);
    }

②在獲取數據完成后設置刷新狀態為false

if (mSwipeRefreshLayout.isRefreshing()) {
                            mSwipeRefreshLayout.setRefreshing(false);
                        }

方法二、

①調用mSwipeRefreshLayout.measure()方法后,設置刷新狀態為true

//手動調用,通知系統去測量
        mSwipeRefreshLayout.measure(0,0);
        mSwipeRefreshLayout.setRefreshing(true);

②在獲取數據完成后設置刷新狀態為false

if (mSwipeRefreshLayout.isRefreshing()) {
                            mSwipeRefreshLayout.setRefreshing(false);
                        }

說明:

方法一和方法二的第一步的目的,都是為了在SwipeRefreshLayout繪制完成之后,再設置刷新狀態為true,否則大多數情況下,SwipeRefreshLayout刷新球會不顯示。

源碼:

package org.raphets.swiperefreshlayoutdemo;

import android.graphics.Color;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private SwipeRefreshLayout mSwipeRefreshLayout;
    private TextView mTextView;

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

        mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.srl);
        mTextView = (TextView) findViewById(R.id.tv);


        //設置刷新球顏色
        mSwipeRefreshLayout.setColorSchemeColors(Color.BLUE, Color.RED, Color.YELLOW);
        mSwipeRefreshLayout.setProgressBackgroundColorSchemeColor(Color.parseColor("#BBFFFF"));
        //手動調用,通知系統去測量
//        mSwipeRefreshLayout.measure(0,0);
        mSwipeRefreshLayout.setRefreshing(true);
        getData();
    }

    /**
     * 模擬網絡請求
     */
    private void getData() {
        new Thread() {
            @Override
            public void run() {
                super.run();
                //模擬網絡請求
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //在UI線程中更新UI
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        mTextView.setText("首次進入自動刷新");
                        if (mSwipeRefreshLayout.isRefreshing()) {
                            mSwipeRefreshLayout.setRefreshing(false);
                        }
                    }
                });
            }
        }.start();
    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        mSwipeRefreshLayout.setRefreshing(true);
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM