スワイプでの更新のユーザー インターフェース パターンは、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>