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

スワイプでの更新のユーザー インターフェース パターンは、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 ウィジェットを追加する

「スワイプで更新」ウィジェットを既存のアプリに追加するには、SwipeRefreshLayout を単一の ListView または GridView の親として追加します。SwipeRefreshLayout がサポートするのは、単一の子(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>

なお、ListFragment でも SwipeRefreshLayout ウィジェットを使用することができます。ID が "@android:id/list"ListView がレイアウトに格納されている場合、「スワイプで更新」機能は自動的にサポートされます。ただし、上記のように ListView を明示的に宣言することで、デフォルト ListFragment ビュー構造よりも優先されるようになります。デフォルト ビュー構造を使用する場合は、SwipeRefreshLayout および ListFragment の動作の部分をオーバーライドします。

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

アプリのアクションバーに更新アクションを追加して、スワイプ操作を行えないユーザーでも手動更新をトリガーできるようにします。たとえば、ユーザー補助機能が必要なユーザーは、キーボードや十字キーなどの外部デバイスを使用することで、アクションバーのアクションをトリガーできます。

更新アクションは、android:showAsAction=never 属性を設定して、ボタンではなくメニュー項目として追加します。このアクションをボタンとして表示した場合、更新ボタン アクションと「スワイプで更新」アクションを別のものだとユーザーが認識するおそれがあります。更新アクションをアクションバーであまり目立たないようにすることにより、スワイプでの更新の手動操作のほうをユーザーにすすめる一方で、十字キーのユーザーが通常探す場所に利用しやすい操作方法を配置することができます。

「スワイプで更新」アクションをオーバーフロー領域に追加する方法を次のコードに示します。

<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>