超簡單!原生SwipeRefreshLayout實現首頁下拉重新整理

weixin_33866037發表於2016-12-19

簡介

SwipeRefreshLayout是Google官方推出的一款下拉重新整理元件,位於v4相容包下

android.support.v4.widget.SwipeRefreshLayout

這裡簡單介紹一下它的超簡單的用法,因為我比較懶,所以直接上程式碼了!

佈局

佈局構造介紹

大概講一下這個佈局構造,直接從專案裡貼過來的,主頁用DragLayout佈局的,由一個主頁和一個側邊欄組成

xml

<android.support.v4.widget.SwipeRefreshLayout
    android:id="@+id/main_refresh"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
     android:layout_width="match_parent">

<!--Control-->
<com.jty.view.DragLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dl"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    >


    <!--側滑-->
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#eff2f5"
        >
    </RelativeLayout>


    <!--主頁-->
    <com.jty.view.MyRelativeLayout
        android:id="@+id/activity_main"
        android:background="@color/main_background"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </com.jty.view.MyRelativeLayout>



</com.jty.view.DragLayout>


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

實現邏輯

  • 首先實現監聽方法,並且設定監聽
    implements SwipeRefreshLayout.OnRefreshListener

    /**
     * Pull To ReFresh
     */
    @BindView(R.id.main_refresh)
    SwipeRefreshLayout mainRefresh;

    private boolean isRefresh = false;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

        EventBus.getDefault().register(this);
        //set refresh listener
        mainRefresh.setOnRefreshListener(this);

        isLogin();
    }
  • 然後進行寫你自己的業務邏輯

  • 重寫onRefresh()方法:

    /**
     * Main Pull To Refresh
     */
    @Override
    public void onRefresh() {
        //判斷重新整理狀態
        if (!isRefresh) {
            isRefresh = true;
            //send request
            getInfo(username, token, ip);
            
        }
    }
  • 在請求完成之後,傳送一條請求到主執行緒:
//send msg to main 
EventBus.getDefault().post("complete");
  • 主執行緒處理

    這裡用的EventBus,可以當Handler用,主執行緒收到資訊之後對狀態進度條狀態做處理,OK,完成了!

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void MainHandler(String msg) {
        if(msg.equals("complete")){
            //完成請求後隱藏重新整理進度條
            mainRefresh.setRefreshing(false);
            isRefresh = false;
        }
    }

後記

以上列出的只是SwipeRefreshLayout的一般用法,如果需要自定義的話就相對複雜一點了,可以參考Android官方說明:https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html,真的特別詳細!

相關文章