Phản hồi yêu cầu làm mới

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.OnRefreshListeneronRefresh() . 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);
}