38

listVivewのヘッダーにビューを追加しました。

    View TopSearch =  (View) View.inflate(this, R.layout.search, null);
    lv.addHeaderView(TopSearch, null, false);

そして、実行しようとするまで(データが変更されたとき)、すべてが正常です。

adapter.notifyDataSetChanged();

それは常に私のアプリケーションをクラッシュさせ、次のエラーを私に与えます:

> java.lang.ClassCastException:android.widget.HeaderViewListAdapter

ヘッダービューを削除してもエラーはありません。助言がありますか?ありがとう。

4

6 に答える 6

125

リストビューでヘッダー/フッター ビューを使用すると、ListView が HeaderViewListAdapter でラップされるようです。以下のコードを使用してこれを修正できます。

((YourAdapter)((HeaderViewListAdapter)lv.getAdapter()).getWrappedAdapter()).notifyDataSetChanged();
于 2012-05-30T16:03:20.590 に答える
12

API 18 以下は、何をラップしているのか混乱しています。それを助けるために、アダプターを割り当てる前にヘッダーやフッターを設定してください。そうすれば、正しいラッピングがカバーの下で行われます。次に、直後にヘッダー/フッターを削除します (それが必要な場合)。

myList.addFooterView(myFooterView);
myList.setAdapter(adapter);
myList.removeFooterView(myFooterView);
于 2014-08-11T03:57:28.000 に答える
6

http://stanllysong.blogspot.ru/2013/08/javalangclasscastexception.htmlに書かれて いるように、次のようにする必要があります。

HeaderViewListAdapter hlva = (HeaderViewListAdapter)l.getAdapter();
YourListAdapter postAdapter = (YourListAdapter) hlva.getWrappedAdapter();
postAdapter.notifyDataSetChanged();
于 2016-04-01T14:46:40.577 に答える
-2
public class YourOwnList extends ListActivity {
    private EfficientAdapter mAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        mAdapter = new EfficientAdapter(/*your parameters for the adapter*/);
    }

    private void yourMethod () {
        mAdapter.notifyDataSetChanged();
    }

    private static class EfficientAdapter extends CursorAdapter {
        // your adapter
    }
}
于 2012-04-17T10:56:44.727 に答える