CursorAdapter を拡張するカスタム アダプターを備えた ListView があります。その ListView にはフッター ビューもあります
OnListItemClickListener でリスト項目 (フッターではない) をクリックすると、ClassCastException が発生します。
Cursor c = ((CursorAdapter)l.getAdapter()).getCursor();
E/AndroidRuntime( 8579): FATAL EXCEPTION: main
E/AndroidRuntime( 8579): java.lang.ClassCastException: android.widget.HeaderViewListAdapter
E/AndroidRuntime( 8579): at com.gbenhaim.dealsapp.BrowsePostsActivity.onListItemClick(BrowsePostsActivity.java:277)
E/AndroidRuntime( 8579): at android.app.ListActivity$2.onItemClick(ListActivity.java:319)
E/AndroidRuntime( 8579): at android.widget.AdapterView.performItemClick(AdapterView.java:284)
E/AndroidRuntime( 8579): at android.widget.ListView.performItemClick(ListView.java:3513)
E/AndroidRuntime( 8579): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812)
E/AndroidRuntime( 8579): at android.os.Handler.handleCallback(Handler.java:587)
E/AndroidRuntime( 8579): at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime( 8579): at android.os.Looper.loop(Looper.java:130)
E/AndroidRuntime( 8579): at android.app.ActivityThread.main(ActivityThread.java:3683)
E/AndroidRuntime( 8579): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 8579): at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime( 8579): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
E/AndroidRuntime( 8579): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
E/AndroidRuntime( 8579): at dalvik.system.NativeStart.main(Native Method)
アダプターを設定する前に、フッター ビューが拡張されてリストビューに追加されます。
フッターをクリックすると正常に動作し、フッターをリストビューに追加しない場合、リスト項目をクリックすると正常に動作します
問題は何ですか?どうすれば修正できますか?
編集: 私のカスタム アダプターは CursorAdapter を拡張し、BindView と NewView をオーバーライドします
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
if (v == footer) {
...
} else {
Cursor c = ((CursorAdapter) l.getAdapter()).getCursor();
c.moveToPosition(position);
...
}
}
class PostAdapter extends CursorAdapter {
public PostAdapter(Context context, Cursor c) {
super(context, c);
// TODO Auto-generated constructor stub
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
// DISPLAY DATA in view
...
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(context);
return inflater.inflate(R.layout.postrow, parent, false);
}
}