このドキュメントでは、ユーザーが手動更新をリクエストしたとき(スワイプ操作によるトリガー、アクションバーの更新アクションの使用など)でアプリを更新する方法について説明します。
更新操作に応答する
ユーザーがスワイプして更新の操作を行うと、進行状況インジケーターが表示され、アプリのコールバック メソッドを呼び出します。コールバック メソッドでアプリのデータを更新します。
アプリで更新操作に応答するには、SwipeRefreshLayout.OnRefreshListener
インターフェースとその onRefresh()
メソッドを実装します。onRefresh()
メソッドは、ユーザーがスワイプ操作を行ったときに呼び出されます。
実際の更新処理のコードを別のメソッド(できれば ViewModel
)に入れ、その更新メソッドを onRefresh()
の実装から呼び出します。こうすることで、ユーザーがアクションバーから更新をトリガーしたときに、同じ更新メソッドを使用して更新を実行できます。
update メソッドで、データの更新が完了したら 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); }