在我的自定义适配器上转换异常

时间:2012-08-07 14:29:21

标签: c# android listview mono xamarin.android

我目前在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而不是最初设置的适配器?如果发生这种情况,如何检索原始适配器?

编辑:重新提出部分问题,使其更清晰

1 个答案:

答案 0 :(得分:4)

使用HeaderViewListAdapter进行了一些实验后,我发现每当ListView有页眉或页脚视图时。它会自动将原始适配器包装在HeaderViewListAdapter中,以管理这些页眉和页脚。然后可以通过调用WrappedAdapter类中的HeaderViewListAdapter属性来检索原始适配器。

我的案例:

HeaderViewListAdapter adapter = (HeaderViewListAdapter)this.setting_listview.Adapter;
TTListAdapter origAdapter = (TTListAdapter)adapter.WrappedAdapter;