响应刷新请求

本文档介绍了当用户请求手动更新时如何更新您的应用 无论他们是通过滑动手势触发还是使用操作栏 刷新操作。

响应刷新手势

当用户做出滑动刷新手势时,系统会显示 进度指示器并调用应用的回调方法。您的回调方法是 负责更新应用数据。

要响应应用中的刷新手势,请实现 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);
}