1. 程式人生 > >FC 12.6 下拉重新整理

FC 12.6 下拉重新整理

前幾篇文章已經將介面寫的差不多了,接下來新增下拉重新整理的功能

Material Design 中制定了Android的統一的下拉重新整理的風格,SwipeRefreshLayout(support-v4)是用於實現下拉重新整理的核心類。

新增下拉重新整理

  • 修改activity_main.xml
    • 在RecycleView外層巢狀SwipeRefreshLayout(由於Recycleview變成了RefreshLayout的子控制元件,因此需要將屬性app:layout_behavior="@string/appbar_scrolling_view_behavior"放到SwipeRefreshLayout裡)
  • 修改MainActivity
    • (通過findViewById繫結控制元件)
    • 呼叫setColorSchemeResources方法來設定下來重新整理進度條的顏色,這裡使用了主題中的colorPrimary顏色
    • 呼叫setOnRefreshListener方法來設定下拉重新整理的監聽器,在onRefresh新增我們的邏輯
  • 新增refreshFruits方法作為我們重新整理時的操作
    • 先開啟一個執行緒休眠2s(這樣我們就可以看到重新整理的動作)
    • 然後使用runOnUiThread將執行緒切回主執行緒,呼叫initFruits方法重新生成資料
    • 呼叫adapter的notifyDataSetChanged通知資料發生變化
    • 呼叫setRefreshing方法,傳入false表示重新整理時間結束,並隱藏重新整理進度條
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer_Layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.design.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        ...
        <android.support.v4.widget.SwipeRefreshLayout
            android:id="@+id/swipe_refresh"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">

            <android.support.v7.widget.RecyclerView
                android:id="@+id/recycle_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
        </android.support.v4.widget.SwipeRefreshLayout>
        ...
    </android.support.design.widget.CoordinatorLayout>
</android.support.v4.widget.DrawerLayout>
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ...
        //此處設定滑動重新整理
        swipeRefresh = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh);
        swipeRefresh.setColorSchemeResources(R.color.colorPrimary);
        swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                refreshFruits();
            }
        });
        ...
}
private void refreshFruits() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    initFruits(); //重新生成資料
                    adapter.notifyDataSetChanged();//通知資料發生變化
                    swipeRefresh.setRefreshing(false);//重新整理結束事件,並隱藏進度條
                }
            });
        }
    }).start();
}

執行,如圖