5

ListView.indexOfChild(View view)メソッドを使用して、ListViewに指定されたヘッダービューが含まれているかどうかを確認しようとしましたが、ListViewに実際に指定されたヘッダーが含まれている場合に-1が返されることがあります。これをチェックするより良い方法はありますか?

4

1 に答える 1

17

'header'とは、いずれかのaddHeaderView(...)方法を使用して追加された実際のヘッダーを意味する場合、を使用して追加されたヘッダーの数を簡単に取得できますgetHeaderViewsCount()

または、私が正しく覚えていれば、ヘッダーやフッターが含まれてListViewいる場合は、アダプターをaでラップします。HeaderViewListAdapterこれを使用しgetHeadersCount()て、上記と同じ番号を取得できます。


編集:特定のヘッダーが追加されているかどうかを確認したい場合は、そのヘッダーを照会できるはずHeaderViewListAdapterです。確認するには、ある種の基準が必要になります。

たとえば、に3つのヘッダーがある場合ListView、最初の3つの項目を反復処理して(おそらく、から直接取得するか、 'sメソッドHeaderListViewAdapterを使用して)、1つが基準に一致するかどうかを確認できます。この「マッチング」を行う最も簡単な方法は、おそらくパラメーターも受け取るメソッドを使用してヘッダーを追加することです。データオブジェクトが異なる場合は、基本的に複数のヘッダーを区別するために何でも提供できます。たとえば、文字列を渡すだけです。ListViewgetItemAtPosition(...)addHeaderView(...)Object

このデータを使用して、最初の3つの位置についてgetItem(...)/getItemAtPosition(...)を呼び出し、何が返されるかを確認できます。データに文字列を使用する利点は、すべてのJavaオブジェクトがtoString()メソッドを実装し、それを利用して簡単に.equals(..)比較できることです。

または、リフレクションを使用して実際のmHeaderViewInfosメンバー変数(単なるArrayList<ListView.FixedViewInfo>)を取得し、それを条件付きロジックに使用することもできます。

于 2012-05-29T19:36:07.040 に答える