2010年03月11日

[Android] ListViewとFooterView (その2)

先日、ListViewとFooterViewについて書きました。
あれからFooterViewを使ったり、調べてみたりしたのですが、
結果、使いにくい!という結論に至りました。
その最大の原因は、FooterViewはListViewにセットするのに
結果的には自動でAdapterの方へ組み込まれる点です。

例えば、20個の配列を持ったArrayAdapterがあるとします。
ListViewに対してFooterViewを1つ組み込んだ後、そのArrayAdapterを組み込みます。
この後でListViewに対して、getCount()を行うと…21が返されます。
FooterViewの分がリストに足されたわけです。
では、このArrayAdapterのインスタンスをListViewにセットしたのとは別に持っていたとします。
このArrayAdapterにgetCount()を行うと…20が返されます…。
すでにこの時点でめんどくさいですが、さらにめんどくさいことが1つ。
ListViewにgetAdapter()をして取得したAdapterに対してgetCount()を行うと…
不思議なことに21が返されます…。

どういうことかと言いますと、FooterView(HeaderViewでも)をListViewに設定していると、
セットしたAdapterはHeaderViewListAdapterにラップされてしまうのです。
セットしたときはArrayAdapterだったのに、ゲットしてきたらHeaderViewListAdapterに
なっていたということがおきます。
ここでめんどくさいのは、FooterViewなどをセットしていないListViewでは
ラップされずにそのままのAdapterが取得できる点です。
FooterViewを出したり、隠したりするようなプログラムだと、
リストの数は変わるわ、インスタンスさえも変わるわで、いろいろとめんどいです。

職場でFooterViewの存在に気づいたときは、こんなに厄介なものだとは気づかずに
「標準で機能が提供されているならこちらを使おう」と思って、
コードを書き換えたのですが、結局のところは元のままの方がよかったです。
僕ならAdapterの中にFooterViewの機能を入れるんですけどねぇ…。

楽しみにされている方がいるかどうかはわかりませんが、今回はサンプルはありません。
FooterViewについて愚痴りたかっただけでございます。

posted by t2low at 01:29| Android