2013-08-02 8 views
7

getItemIdAtPosition()がその位置アンドロイド:そのIDを指定したリストビュー内のアイテムの位置を取得:

与えられたリストビューにアイテムのIDを取得するために使用するアンドロイド内の関数である逆を行うのいずれかの方法があり、すなわち、アイテムの位置を取得することは、そのIDを与えられたリストビューですか?

+1

によってそれを得ることができ、たとえば答えるには遅すぎですが、利益のために...
あなたのリストビューを裏づけしているarraylist?私はあなたがこれを達成するために使うことができると確信しています。 – midhunhk

答えて

10

いいえ、手動で行う必要があります。使用しているアダプタの内部にパブリックメソッドを作成します。その方法では、アダプタ項目をループし、各項目IDを確認します。それがメソッドparamに==の場合は、インデックスを返します。

public int getItemPosition(long id) 
{ 
    for (int position=0; position<mList.size(); position++) 
     if (mList.get(position).getId() == id) 
      return position; 
    return 0; 
} 

更新:検索のパフォーマンスをご利用の場合の問題を表す場合あなたにも、あなたのアダプタで位置/ idのHashMapを救うかもしれません。

更新:あなたはアダプターの外、このメソッドを使用したい場合は、下記の使用:あなたはListView IDと位置をバックアップするために使用しているものをアダプタに応じて番号がかもしれ

private int getAdapterItemPosition(long id) 
{ 
    for (int position=0; position<mListAdapter.getCount(); position++) 
     if (mListAdapter.get(position).getId() == id) 
      return position; 
    return 0; 
} 
+0

あなたはそれのためのコードを与えることができます? @andrew – user2595281

+0

あなたのアダプタが何を含んでいるかによって決まることを理解する必要があります。それにもかかわらず、上のコードがあります。 –

+0

あなたはどのようにその配列を取得するのか分からない、リストビューとid、与えられた同じ機能を行う方法を教えてくださいできますか? @andrew – user2595281

0

を同じ(私は確かに言うことができないので、すべてBaseAdapterサブクラスを見ていない)。 look at the source code for ArrayAdapterの場合、getItemIdは実際にアダプタ内のオブジェクトの位置を返します。位置とIDが同じ場合、別のIDとIDを取得する必要はありません。それ以外の場合は、探しているオブジェクトをアダプターで検索するだけで、位置やIDのどちらかを使用して、別の値を見つけることができます。

あなたが話しているのは、いくつかのユニークなキー(つまり、自分が定義したキー)を使ってオブジェクトを取得している場合です。あなたがする必要があるのはArrayListの代わりにHashMapか、オブジェクトの通常Listの代わりにアダプタを設定することです。次に、HashMapからその値を引くだけで、キーで検索する独自の方法を作成できます。

+1

全くありません。たとえば、CursorAdaptersなどです。すべてではないにしても、ほとんどのカスタムアダプターはもちろんです。値が同じである可能性があるという考えに全く頼らないでください。 HashMapに関しては、それはリストルックアップメソッドの代替です。それはあなたのニーズに依存します。 –

+0

あなたがカスタムアダプターを書いていれば、すべての賭けはオフになっています。 CursorAdapterはとても良い点だとは思わなかった。 HashMapはまだこれを行う最も簡単で最速の方法です。 – Rarw

4

質問がまだ開いているかどうかわかりません。それにもかかわらず、私は同じことをしようとしている人を助けるために、どうやってそれをしたかを分かち合うつもりだと思った。

ビューのタグ機能を使用して、そのビューのIDとそのリスト内の位置の間のマッピングを格納できます。

Androidデベロッパーサイト上のタグのドキュメントには、それをうまく説明:

http://developer.android.com/reference/android/view/View.html#Tags

http://developer.android.com/reference/android/view/View.html#setTag(int, java.lang.Object)

http://developer.android.com/reference/android/view/View.html#getTag(int)

例: リストアダプタのGetViewメソッドでは、することができますそのビューのIDとリスト内のその位置のマッピングを設定します。

public View getView (int position, View convertView, ViewGroup parent) 
{ 
    if(convertView == null) 
    { 
      // create your view by inflating a xml layout resource or instantiating a 
      // custom view class 
    } 
    else 
    { 
      // Do whatever you want with the convertView object like 
      // finding a child view that you want to set some property of,etc. 
    } 

    // Here you set the position of the view in the list as its tag 
    convertView.setTag(convertView.getId(),position); 

    return convertView; 
} 

ビューの位置を取得したい、あなたは何をするでしょう:注意すべきポイントは、あなたが位置あなたが取得したいビューへの参照を持っている必要がないということです

int getItemPosition(View view) 
{ 
    return view.getTag(view.getId()); 
} 

。ビューのリファレンスをどのように保持するかは、特定のケースに依存します。

0

それはあなたがリストビューを持っていて、クリックリスナーでIDを取得したい場合は、あなたは、配列を持つことになります>>

cListview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 


      @Override 
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
       // for id or any informations 

           itemID = String.valueOf(catList.get(position).getItemID()); 

// for name or any informations 

            itemName = String.valueOf(catList.get(position).getItemName()); 
関連する問題