2013/06/01
ListViewのFooterでちょいとはまったのでメモ
Android で ListView にカスタムの Adapter と Footer を併用しようとすると例外が出る。忘れそうなのでメモ。
普通にこんな感じの事をして一覧に footer を付ける。
View footerView = activity.getLayoutInflater().inflate(R.layout.list_footer, null);
listView.addFooterView(footerView);
listView.setAdapter(new MyAdapter());
この後、adapter を取り出すと例外になる。
MyAdapter adapter = (MyAdapter) listView.getAdapter();
↓
java.lang.ClassCastException: android.widget.HeaderViewListAdapter cannot be cast to MyAdapter
理由は ListView.setAdapter() の JavaDoc に書いてある通り、
Header/Footerを使うと Adapter がラップされるから。
#addFooter() が setAdapter() に前に必要なのはこのため。
後付でHeader/Footerが必要になった場合は有りがちな状況に思える。
とりあえずの回避方法はこれ。
MyAdapter adapter = (MyAdapter) ((WrapperListAdapter)listView.getAdapter()).getWrappedAdapter();
とりだした adapter は普通に操作して問題無い。
この投稿へのコメント

コメント・フォーム