ListVivewのヘッダーにビューを追加しました。
View TopSearch = (View) View.inflate(this, R.layout.search, null);
lv.addHeaderView(TopSearch, null, false);
そして、実行しようとするまで(データが変更されたとき)、すべてが正常です。
adapter.notifyDataSetChanged();
それは常に私のアプリケーションをクラッシュさせ、次のエラーを私に与えます:
> Java.lang.ClassCastException:Android.widget.HeaderViewListAdapter
ヘッダービューを削除してもエラーはありません。助言がありますか?ありがとう。
リストビューでヘッダー/フッタービューを使用するときはいつでも、リストビューはHeaderViewListAdapterでラップされるようです。以下のコードを使用してこれを修正できます。
((YourAdapter)((HeaderViewListAdapter)lv.getAdapter()).getWrappedAdapter()).notifyDataSetChanged();
API 18以下は、何をラップしているかについて混乱しています。これを支援するには、アダプターを割り当てる前にヘッダーやフッターを設定してください。そうすれば、正しいラッピングがカバーの下で行われます。次に、直後にヘッダー/フッターを削除します(必要な場合)。
myList.addFooterView(myFooterView);
myList.setAdapter(adapter);
myList.removeFooterView(myFooterView);
http://stanllysong.blogspot.ru/2013/08/javalangclasscastexception.html で書かれているように、そうする必要があります。
HeaderViewListAdapter hlva = (HeaderViewListAdapter)l.getAdapter();
YourListAdapter postAdapter = (YourListAdapter) hlva.getWrappedAdapter();
postAdapter.notifyDataSetChanged();
@mussharappの答えは完全に正しく、機能します。ただし、setAdapter()を実行する前に、後で使用するためにアダプターをメンバー変数にキャッシュする方が便利です。
mAdapter = new YourAdapter(ctx, items);
listView.addFooterView(v);
listView.setAdapter(mAdapter);
クラスキャスト例外の理由は、リストビューがヘッダーリストビューにラップされなかったためです。そのため、フッターやヘッダーをリストビューに直接追加することはできません。したがって、アダプタをリストビューに設定する前に、ダミービューをヘッダーまたはフッタービューとして追加します。次に、アダプタをリストビューに設定します。これにより、listviewがheaderviewslistのインスタンスになります。その後、通常どおりリストビューからフッターを簡単に追加および削除できます。
listview.addFooterView(new View(mContext));listview.setAdapter(yourAdapter):
アダプターを設定した後、フッターlistview.addFooterView(yourFooter);を追加または削除できます。またはlistview.removeFooterView(yourFooter);