本文件說明當使用者透過手動提出要求時,如何更新您的應用程式 進行重新整理,設定透過滑動手勢或動作列觸發事件 重新整理動作。
回應重新整理手勢
當使用者做出滑動重新整理手勢時,系統會在畫面上顯示 進度指標並呼叫應用程式的回呼方法。您的回呼方法為 負責更新應用程式的資料
如要回應應用程式中的重新整理手勢,請實作
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); }