サンプルコード
簡単なサンプルコードを作ってみました。
リストを下に引っ張ると更新アニメーションが2秒間表示されます。
ActionBarのメニューからも更新アニメーションを表示します。
リストを下に引っ張ると更新アニメーションが2秒間表示されます。
ActionBarのメニューからも更新アニメーションを表示します。
SwipeRefreshLayout
今回追加されたのはリストを下側に引っ張ってコンテンツを更新するレイアウトです。(いわゆるPull To Refresh)SwipeRefreshLayoutをListViewの親レイアウトとして定義します。
SwipeRefreshLayoutを使用する準備として、setColorSchemeで色のリソースidを設定します。
これにより指定された色がアニメーションとして表示されます。(8行目)
また、更新処理のコールバックとしてsetOnRefreshListenerでSwipeRefreshLayout.OnRefreshListenerを設定します。(12行目)
更新時の処理はSwipeRefreshLayout.OnRefreshListener#onRefreshで受け取ります。
ここでは単に2秒後にmRefreshDone内の処理を行っているだけです。(14行目)
setEnable(false)はリストを下に引っ張れないようにロックします。更新中はこれを呼び出すことで引っ張る操作を防げます。(16行目)
2秒後にmRefreshDoneの処理が呼び出されます。
setRefreshing(false)を呼び出すとでアニメーションが停止します。(6行目)
setEnabled(true)を呼び出すと下に引っ張りだす操作を復活させます。(8行目)
setRefreshing(true)を呼び出すと、マニュアルで更新時のアニメーションが表示されます。(6行目)
この場合も前述と同じようにsetRefreshing(false)を呼び出すことでアニメーションが停止します。
所感
SwipeRefreshLayoutは、引っ張った時や更新中の進捗表示が用意されているので、開発側で大きな変更をすることなく既存のアプリに組み込めそうです。しかし、リストのヘッダ部分に何かメッセージを表示させたり、Gmailのように引っ張った時にActionBarを変化させる処理は用意されていません。この辺りは自作するかStackOverFlowに頼ることになりそうです。