我目前在Monodroid中遇到Android ListView问题。
我使用这样的自定义适配器初始化并设置列表:
ListView setting_listview = new ListView(this);
//Components and layoutparameters is done here
RelativeLayout bottom_view = new RelativeLayout(this);
//Components/layoutparameters is done here
setting_listview.AddFooterView(bottom_view);
TTListAdapter adapter = new TTListAdapter(this, listdata, Resource.Layout.datatable_list_item,secList);
setting_listview.Adapter = adapter;
现在,当我尝试在另一段代码中检索适配器时,这样:
TTListAdapter adapter = (TTListAdapter)setting_listview.Adapter;
我收到以下异常:System.InvalidCastException: Cannot cast from type HeaderViewListAdapter to TTListAdapter
。显然,Adapter属性现在返回HeaderViewListAdapter,而不是在初始化期间设置的预期TTListAdapter。
如果我在初始化期间未使用AddFooterView
,则会返回初始化期间设置的原始TTListAdapter
。
为什么在调用HeaderViewListAdapter
后,Adapter属性返回AddFooterView
而不是最初设置的适配器?如果发生这种情况,如何检索原始适配器?
编辑:重新提出部分问题,使其更清晰
答案 0 :(得分:4)
使用HeaderViewListAdapter
进行了一些实验后,我发现每当ListView
有页眉或页脚视图时。它会自动将原始适配器包装在HeaderViewListAdapter
中,以管理这些页眉和页脚。然后可以通过调用WrappedAdapter
类中的HeaderViewListAdapter
属性来检索原始适配器。
我的案例:
HeaderViewListAdapter adapter = (HeaderViewListAdapter)this.setting_listview.Adapter;
TTListAdapter origAdapter = (TTListAdapter)adapter.WrappedAdapter;