導入
android.support.v4.widget.SwipeRefreshLayout
を使用する。
サポートライブラリを指定せず、<SwipeRefreshLayout></SwipeRefreshLayout>
と記述すると、Error inflating class SwipeRefreshLayout
となり、ビルドは通るがXMLパースでコケる。
<android.support.v4.widget.SwipeRefreshLayout android:id="@+id/swipe_refresh_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </android.support.v4.widget.SwipeRefreshLayout>
この記述だけで入れ子にしたViewを引っ張る動作と連動したインジゲーターが表示できる。
pullされた時の処理を記述する
onRefreshListenerを登録することで処理をセットできる
swipe_refresh_layout.setOnRefreshListener { doAction() }
処理後インジゲーターを非表示にする
ただし、layoutに定義しただけだと、インジゲーターが表示され続ける。よって、コード側でインジゲーターを消す処理を記述する。
swipe_refresh_layout.setOnRefreshListener {
doAction()
swipe_refresh_layout.isRefreshing = false
}
注意点
SwipeRefreshLayoutはLayout内で記述された先頭のViewのみしか表示しない。よって以下のように記述した場合、下のTextViewが表示されない。
<android.support.v4.widget.SwipeRefreshLayout android:id="@+id/swipe_refresh_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent" /> <LTextView android:id="+id/text_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </android.support.v4.widget.SwipeRefreshLayout>
リンク
リンク