在我的自定义适配器上投射异常

本文关键字:异常 适配器 我的 自定义 | 更新日期: 2024-10-26 04:40:13

我目前在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。显然,适配器属性现在返回一个 HeaderViewListAdapter,而不是在初始化期间设置的预期 TTListAdapter。

如果我在初始化过程中不使用AddFooterView,它将返回初始化期间设置的原始TTListAdapter

为什么 Adapter 属性在调用 AddFooterView 后返回HeaderViewListAdapter而不是最初设置的适配器,如果发生这种情况,如何检索原始适配器?

编辑:改写了问题的一部分,使其更清晰一些

在我的自定义适配器上投射异常

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

我的情况示例:

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