1

我目前在 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在初始化期间设置的原始文件。

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

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

4

1 回答 1

4

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

我的案例示例:

HeaderViewListAdapter adapter = (HeaderViewListAdapter)this.setting_listview.Adapter;
TTListAdapter origAdapter = (TTListAdapter)adapter.WrappedAdapter;
于 2012-08-07T14:58:12.180 回答