2013年5月20日月曜日

ListViewで無限スクロール (Android)

ListViewで最後までスクロールしたら続きのデータを読み込んで、いくらでもスクロールできるようにするコード例です。実際のところ無限ということはあり得ないのですけど、データがどれだけ大量にあっても対応できるということです。

大量のデータをListViewで表示したければ普通はContentProviderを作ってLoaderManagerを使ってCursorAdapterにCursorをセットして作ればいいのですが、ContentProviderというものは何かと文字列に持っていこうとするので個人的にあまり好んでいません。引数にSQL断片を渡されても、ここから値を取り出して値域のチェックなんてやってられません。アプリ内部で使うなら引数のチェックなんてしないでSQLにぶち込んでしまえ、という考え方もあるかもしれませんが。

そこでContentProviderのかわりにServiceでデータアクセスを提供し、ListViewに常に一定以下のデータだけを持たせて端までスクロールしたら続きのデータをロードする、そしてあふれたデータはリストから削除する、というプログラムを作ってみました。