スワイプでの更新をアプリへ追加する

スワイプで更新するユーザー インターフェース パターンは、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 ビュー構造よりも優先されます。デフォルトのビュー構造を使用する場合は、SwipeRefreshLayoutListFragment の動作の一部をオーバーライドします。

アクションバーに更新アクションを追加する

アプリのアクションバーに更新アクションを追加して、スワイプ操作を実行できないユーザーが手動更新をトリガーできるようにします。たとえば、ユーザー補助機能が必要なユーザーは、キーボードや 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>