本文档介绍了如何在用户请求手动刷新(无论用户是通过滑动手势触发刷新,还是使用操作栏刷新操作触发刷新)时更新您的应用。
响应刷新手势
当用户执行滑动刷新手势时,系统会显示进度指示器并调用应用的回调方法。您的回调方法负责更新应用的数据。
如需响应应用中的刷新手势,请实现 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()
。在替换方法中,使用值 true
,通过调用 setRefreshing()
触发 SwipeRefreshLayout
进度指示器,然后执行更新操作。在单独的方法中执行实际更新,这样无论用户是通过滑动手势还是使用操作栏触发更新,都会调用相同的方法。更新完成后,调用 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); }