2012-02-17 19 views
0

私がクリックされたアイテムの列に位置を微する必要がonListItemClick、 'id'から絶対位置を取得できますか?

setListAdapter(new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, column)); 
getListView().setTextFilterEnabled(true); 

public void onListItemClick(
     ListView parent, View v, int position, long id) 

を持っています。フィルターがオンになっているため、ポジションが良好ではありません。どういうわけか 'id'から本当の位置を導き出すことはできますか?

答えて

2

一つの可能​​な解決策:

あなたはリストビューを設定した後、アレイへのすべての可視アイテムのインデックスを追加し、リスト全体の貫流を行います。例えば、2番目と4番目の項目は見えないと5要素のリストにおいて、それは次のようになります

インデックス[0] = 0
インデックス[1] = -1
インデックス[2] = 1つの
インデックス[3] = -1 [4]
インデックス=その後、2

あなたはonListItemClick内の位置を取得し、それが実位置を返します「インデックス」配列のインデックスだけですフィルタリングされたListView。

次に、onListItemClick内で、パラメータとして渡された位置をキーとして使用して、フィルタリングされたリスト内の位置をルックアップします。

EDIT:SparseArrayは過剰です。合理的に簡単なソリューションを提供します。

+0

こんにちはアレックス私はもっと簡単な解決策を望んでいましたが、私はそれを念頭に置いています。 – cliff2310

1

.getChildCount().getChildAt()を使用し、次にそれぞれの数字を数えるために.getVisibility() == View.VISIBLEをチェックして、クリックしたアイテムが現在の反復されたアイテムと等しいかどうかを確認してください。私が恐れる単純な方法はありません。

+0

こんにちはTom入力していただきありがとうございます。 – cliff2310

0

listviewの位置は、汎用オブジェクトの要素の位置、つまりリストを渡すリストです。

+0

こんにちはRakshi再生中のフィルターではありません。これは、フィルタリングされたリストの相対的な位置になります。 Cliff – cliff2310

0

私はItemIDを使って幸運を祈ることはありませんでした。

代わりに、データをView vから引き出すことができます。このビューには、ユーザーがクリックした行を特定するために使用できるTextViewが含まれている場合があります。しかし、複数の行を同じように表示できる場合は、これは機能しません。

その場合は、アダプタのすべての要素にgetItemID(int position)を呼び出すデータセットを反復処理する必要があります。これらのlongをデータセットと同じサイズの配列に格納し、columnデータセットとこの長いItemID配列の両方で同じインデックスを使用します。

+0

こんにちはEdthethirdこれはいくつかのメリットがあります。私は配列を検索して文字列を比較していましたが、重複があります。私はこれを使って重複を整理することができました。ありがとう。 – cliff2310