在我的应用程序中,我实现了导航抽屉,该抽屉显示了支票簿的银行帐户列表。我编写了一个处理此列表的AccountAdapter类,并在NavigationDrawerFragment类中使用以下生成的代码:

mDrawerListView.setAdapter(mAccountAdapter);
mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l){
        AccountAdapter adapter = (AccountAdapter) adapterView.getAdapter();
        Cursor cursor = adapter.getCursor();
        if(cursor != null && cursor.moveToPosition(i)){
            // Do nothing!
        }
    }
});


但是,在onItemClick方法的第一行出现错误:


  java.lang.ClassCastException:android.widget.HeaderViewListAdapter无法转换为com.example.android.checkit.AccountAdapter


这是处理此ListView的itemClick事件的正确方法吗?如何调整代码以避免此错误?

最佳答案

使用AccountAdapter adapter = (AccountAdapter) adapterView.getWrappedAdapter() (doc).

更新:

HeaderViewListAdapter headerViewAdapter = (HeaderViewListAdapter) adapterView.getAdapter();
AccountAdapter adapter = (AccountAdapter) headerViewAdapter.getWrappedAdapter();

10-06 03:39