2010年03月03日

[Android] ListViewとFooterView

最近、リストの末尾に「もっと読む」とか「さらに表示」とか書かれたUIがよくありますね。
「Load more」とか「Read more」とか英語で書かれている場合もあります。
たいていクリックしたり表示したりすることで続きを読み込むようになっています。
Androidのアプリでもよく見かけるので、少し前にどう実現しているのか考えていました。

最初に思いついたのは、Adapterを継承して末尾に自分で「もっと読む」を表示したViewを追加することです。
getCount()をオーバーライドして通常より1つ多めの数を返却するようにし、
getView()でpositionが末尾のときだけ別のViewを返すようにしてやれば実現できるだろうと推測しました。
実際やってみたらできました。
最初のうちはエラーなんかも出ましたが、何度も実装を見直しているうちに
なかなかちゃんと動くものになってきました。

ここで一つ大きな過ちをしでかしていたことに気づきました。
それは元々その機能が提供されているか考えなかったことです。
ご察しの通り、AndroidにはそういったUIを実現するための機能がありました。

それがFooterViewです。
使い方は簡単で、ListViewのsetFooterView()で表示したいViewを指定するだけ。
ただ、FooterViewはAdapterをセットする前に設定しないと表示されないようですね。
onItemClick()では、リストの末尾のpositionより1大きな数がpositionとして通知されるようです。

readmore.png

同様にHeaderViewというものもありましたが、こちらは試していません。
positionがどうズレるのか少し気になりますね。

ガガガっと書いたのでいろいろ不具合がありそうなサンプルは↓こちら。
ReadMoreListViewTest.zip
posted by t2low at 00:17| Android