在我的自定义适配器上投射异常
本文关键字:异常 适配器 我的 自定义 | 更新日期: 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;