スワイプで更新するユーザー インターフェース パターンは、SwipeRefreshLayout
ウィジェット内に完全に実装されます。このウィジェットは、垂直スワイプを検出し、明確な進行状況バーを表示し、アプリ内でコールバック メソッドをトリガーします。この動作を有効にするには、ウィジェットを ListView
または GridView
の親としてレイアウト ファイルに追加し、ユーザーがスワイプしたときに呼び出される更新動作を実装します。
このページでは、既存のレイアウトにウィジェットを追加する方法について説明します。また、スワイプ操作を使用できないユーザーが外部デバイスで手動更新をトリガーできるように、アクションバーのオーバーフロー領域に更新アクションを追加する方法についても説明します。
SwipeRefreshLayout の依存関係を追加する
アプリで SwipeRefreshLayout
を使用するには、build.gradle
ファイルに次の依存関係を追加します。
Groovy
dependencies { implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01" }
Kotlin
dependencies { implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01") }
SwipeRefreshLayout ウィジェットを追加する
スワイプでの更新ウィジェットを既存のアプリに追加するには、単一の ListView
または GridView
の親として SwipeRefreshLayout
を追加します。SwipeRefreshLayout
は、1 つの子 ListView
または GridView
のみをサポートします。
次の例は、ListView
を含む既存のレイアウト ファイルに SwipeRefreshLayout
ウィジェットを追加する方法を示しています。
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/swiperefresh" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="match_parent" /> </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
SwipeRefreshLayout
ウィジェットを ListFragment
で使用することもできます。レイアウトに ID が "@android:id/list"
の ListView
が含まれている場合、スワイプでの更新機能が自動的にサポートされます。ただし、この方法で ListView
を明示的に宣言することは、デフォルトの ListFragment
ビュー構造よりも優先されます。デフォルトのビュー構造を使用する場合は、SwipeRefreshLayout
と ListFragment
の動作の一部をオーバーライドします。
アクションバーに更新アクションを追加する
アプリのアクションバーに更新アクションを追加して、スワイプ操作を実行できないユーザーが手動更新をトリガーできるようにします。たとえば、ユーザー補助機能が必要なユーザーは、キーボードや D-pad などの外部デバイスを使用してアクションバー アクションをトリガーできます。
更新アクションをボタンではなくメニュー項目として追加するには、属性 android:showAsAction=never
を設定します。アクションをボタンとして表示した場合、ユーザーは、更新ボタンのアクションが、スワイプして更新するためのアクションとは異なるものと考える可能性があります。更新アクションをアクションバー内で目立たなくすることで、ユーザーは D-pad ユーザーが検索できるユーザー補助機能を維持したまま、スワイプ操作で手動更新を実行することが奨励されます。
次のコードは、スワイプでの更新アクションをオーバーフロー領域に追加する方法を示しています。
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/menu_refresh" android:showAsAction="never" android:title="@string/menu_refresh"/> </menu>