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 プロパティは、初期化中に設定された予想される TTListAdapter ではなく、HeaderViewListAdapter を返すようになりました。

初期化中に使用しないAddFooterViewと、初期化中に設定されたオリジナルが返さTTListAdapterれます。

HeaderViewListAdapterが呼び出された後、Adapter プロパティが最初に設定された Adapter ではなく を返すのはなぜAddFooterViewですか? また、これが発生した場合、元の Adapter を取得するにはどうすればよいですか?

編集:質問の一部を言い換えて、少し明確にしました

4

1 に答える 1

4

でさらに実験した後、ヘッダーまたはフッタービューがHeaderViewListAdapter常にあることがわかりました。これらのヘッダーとフッターを管理する でListView元のアダプターを自動的にラップします。その後、クラスでプロパティをHeaderViewListAdapter呼び出すことにより、元のアダプタを取得できます。WrappedAdapterHeaderViewListAdapter

私の場合の例:

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