Tài liệu này cho biết cách cập nhật ứng dụng khi người dùng yêu cầu làm mới, cho dù họ kích hoạt bằng cử chỉ vuốt hoặc sử dụng thanh thao tác làm mới.
Phản hồi cử chỉ làm mới
Khi người dùng thực hiện cử chỉ vuốt để làm mới, hệ thống sẽ hiển thị chỉ báo tiến trình và gọi phương thức gọi lại của ứng dụng. Phương thức gọi lại của bạn là chịu trách nhiệm cập nhật dữ liệu của ứng dụng.
Để phản hồi cử chỉ làm mới trong ứng dụng của bạn, hãy triển khai
SwipeRefreshLayout.OnRefreshListener
và
onRefresh()
. Phương thức onRefresh()
sẽ được gọi khi người dùng thực hiện một
cử chỉ vuốt.
Đặt mã cho hoạt động cập nhật thực tế vào một phương thức riêng biệt, tốt nhất là
trong ViewModel
, rồi gọi phương thức cập nhật đó từ
Triển khai onRefresh()
. Bằng cách đó, bạn có thể sử dụng cùng một bản cập nhật
để thực hiện cập nhật khi người dùng kích hoạt làm mới từ hành động
thanh.
Trong phương thức cập nhật, hãy gọi
setRefreshing(false)
khi cập nhật xong dữ liệu. Việc gọi phương thức này sẽ hướng dẫn
SwipeRefreshLayout
để xoá chỉ báo tiến trình và cập nhật nội dung của khung hiển thị.
Ví dụ: mã sau đây triển khai onRefresh()
và
gọi phương thức myUpdateOperation()
để cập nhật dữ liệu hiển thị
theo
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(); } );
Phản hồi thao tác làm mới
Nếu người dùng yêu cầu làm mới bằng cách sử dụng thanh tác vụ, hệ thống sẽ gọi hàm
onOptionsItemSelected()
. Ứng dụng của bạn sẽ phản hồi cuộc gọi này bằng cách cho thấy chỉ báo tiến trình và
làm mới dữ liệu của ứng dụng.
Để phản hồi thao tác làm mới, hãy ghi đè
onOptionsItemSelected()
. Trong phương thức ghi đè, hãy kích hoạt
Chỉ báo tiến trình của SwipeRefreshLayout
bằng cách gọi
setRefreshing()
với giá trị true
, sau đó thực hiện
cập nhật. Thực hiện cập nhật thực tế theo một phương thức riêng biệt, để tương tự
có thể được gọi là phương thức người dùng kích hoạt cập nhật bằng thao tác vuốt hay sử dụng
thanh tác vụ. Khi quá trình cập nhật hoàn tất, hãy gọi setRefreshing(false)
để xoá chỉ báo tiến trình làm mới.
Đoạn mã sau đây cho biết cách phản hồi hành động yêu cầu:
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); }