ListView.indexOfChild(View view)メソッドを使用して、ListViewに指定されたヘッダービューが含まれているかどうかを確認しようとしましたが、ListViewに実際に指定されたヘッダーが含まれている場合に-1が返されることがあります。これをチェックするより良い方法はありますか?
1 に答える
'header'とは、いずれかのaddHeaderView(...)
方法を使用して追加された実際のヘッダーを意味する場合、を使用して追加されたヘッダーの数を簡単に取得できますgetHeaderViewsCount()
。
または、私が正しく覚えていれば、ヘッダーやフッターが含まれてListView
いる場合は、アダプターをaでラップします。HeaderViewListAdapter
これを使用しgetHeadersCount()
て、上記と同じ番号を取得できます。
編集:特定のヘッダーが追加されているかどうかを確認したい場合は、そのヘッダーを照会できるはずHeaderViewListAdapter
です。確認するには、ある種の基準が必要になります。
たとえば、に3つのヘッダーがある場合ListView
、最初の3つの項目を反復処理して(おそらく、から直接取得するか、 'sメソッドHeaderListViewAdapter
を使用して)、1つが基準に一致するかどうかを確認できます。この「マッチング」を行う最も簡単な方法は、おそらくパラメーターも受け取るメソッドを使用してヘッダーを追加することです。データオブジェクトが異なる場合は、基本的に複数のヘッダーを区別するために何でも提供できます。たとえば、文字列を渡すだけです。ListView
getItemAtPosition(...)
addHeaderView(...)
Object
このデータを使用して、最初の3つの位置についてgetItem(...)
/getItemAtPosition(...)
を呼び出し、何が返されるかを確認できます。データに文字列を使用する利点は、すべてのJavaオブジェクトがtoString()
メソッドを実装し、それを利用して簡単に.equals(..)
比較できることです。
または、リフレクションを使用して実際のmHeaderViewInfos
メンバー変数(単なるArrayList<ListView.FixedViewInfo>
)を取得し、それを条件付きロジックに使用することもできます。