読者です 読者をやめる 読者になる 読者になる

ListView に、ヘッダやフッタを付加する場合、

ListView に、addHeaderView addFooterView を使用してヘッダ、フッタに View を追加した場合、
注意がひつようで、以下の様な場合、ListView#getAdapter を実行すると、HeaderViewListAdapter を取得することになる。
以下のようにコードでは、、

ListView mListview;
  :
mListview.addFooterView(mFooterView);;

mListview.setAdapter(new ArrayAdapter<FooItem>(this, 0, mList){
   LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   @Override
   public View getView(int position, View convertView, ViewGroup parent){
      View = 
         :
      // 省略
         :
      return view;

   }
});
----
*1.notifyDataSetChanged()
というコードは成立しない。

ClassCastException : HeaderViewListAdapter cannot be cast to android.widget.BaseAdapter

となる。

以下のようにする必要がある。

HeaderViewListAdapter headerViewListAdapter = (HeaderViewListAdapter)mListview.getAdapter();
((BaseAdapter)headerViewListAdapter.getWrappedAdapter()).notifyDataSetChanged();

1行で書くなら、、、

(BaseAdapter)*2.getWrappedAdapter()).notifyDataSetChanged();


*1:BaseAdapter)mListview.getAdapter(

*2:HeaderViewListAdapter)mListview.getAdapter(