回應重新整理要求

本文件說明當使用者透過手動提出要求時,如何更新您的應用程式 進行重新整理,設定透過滑動手勢或動作列觸發事件 重新整理動作。

回應重新整理手勢

當使用者做出滑動重新整理手勢時,系統會在畫面上顯示 進度指標並呼叫應用程式的回呼方法。您的回呼方法為 負責更新應用程式的資料

如要回應應用程式中的重新整理手勢,請實作 SwipeRefreshLayout.OnRefreshListener 介面上 onRefresh() 方法。當使用者執行onRefresh() 或滑動手勢

請將實際更新作業的程式碼放在個別方法中 (最好是這麼做的) 在 ViewModel 內,並透過 onRefresh() 實作。這樣你就能將相同的更新內容 方法,在使用者從動作觸發重新整理時執行更新 。

在更新方法中,呼叫 setRefreshing(false) 系統完成資料的更新時。呼叫這個方法會指示 SwipeRefreshLayout 即可移除進度指標並更新檢視畫面內容。

舉例來說,以下程式碼會實作 onRefresh() 和 叫用 myUpdateOperation() 方法,更新顯示的資料 依 ListView:

Kotlin

// Sets up a SwipeRefreshLayout.OnRefreshListener that invokes when
// the user performs a swipe-to-refresh gesture.

mySwipeRefreshLayout.setOnRefreshListener {
    Log.i(LOG_TAG, "onRefresh called from SwipeRefreshLayout")

    // This method performs the actual data-refresh operation and calls
    // setRefreshing(false) when it finishes.
    myUpdateOperation()
}

Java

// Sets up a SwipeRefreshLayout.OnRefreshListener that is invoked when
// the user performs a swipe-to-refresh gesture.

mySwipeRefreshLayout.setOnRefreshListener(() -> {
    Log.i(LOG_TAG, "onRefresh called from SwipeRefreshLayout");

    // This method performs the actual data-refresh operation and calls
    // setRefreshing(false) when it finishes.
    myUpdateOperation();
  }
);

回應重新整理動作

當使用者使用動作列要求重新整理時,系統會呼叫 onOptionsItemSelected() 方法。應用程式顯示進度指標並 重新整理應用程式的資料。

如要回應重新整理動作,請覆寫 onOptionsItemSelected()。在覆寫方法中,觸發 呼叫SwipeRefreshLayout進度指標 將 setRefreshing() 設為 true,然後執行 更新作業。請以獨立方法執行實際更新,因此 這個方法可呼叫 方法,從使用者如何滑動或使用應用程式觸發更新 動作列更新完成後,請呼叫 setRefreshing(false) 即可移除重新整理進度指標

以下程式碼顯示如何回應要求動作:

Kotlin

// Listen for option item selections to receive a notification when the user
// requests a refresh by selecting the refresh action bar item.

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    when (item.itemId) {

        // Check whether the user triggers a refresh:
        R.id.menu_refresh -> {
            Log.i(LOG_TAG, "Refresh menu item selected")

            // Signal SwipeRefreshLayout to start the progress indicator.
            mySwipeRefreshLayout.isRefreshing = true

            // Start the refresh background task. This method calls
            // setRefreshing(false) when it finishes.
            myUpdateOperation()

            return true
        }
    }

    // User doesn't trigger a refresh. Let the superclass handle this action.
    return super.onOptionsItemSelected(item)
}

Java

// Listen for option item selections to receive a notification when the user
// requests a refresh by selecting the refresh action bar item.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        // Check whether the user triggers a refresh:
        case R.id.menu_refresh:
            Log.i(LOG_TAG, "Refresh menu item selected");

            // Signal SwipeRefreshLayout to start the progress indicator.
            mySwipeRefreshLayout.setRefreshing(true);

            // Start the refresh background task. This method calls
            // setRefreshing(false) when it finishes.
            myUpdateOperation();

            return true;
    }

    // User doesn't trigger a refresh. Let the superclass handle this action.
    return super.onOptionsItemSelected(item);
}