getItemIdAtPosition()
がその位置アンドロイド:そのIDを指定したリストビュー内のアイテムの位置を取得:
与えられたリストビューにアイテムのIDを取得するために使用するアンドロイド内の関数である逆を行うのいずれかの方法があり、すなわち、アイテムの位置を取得することは、そのIDを与えられたリストビューですか?
getItemIdAtPosition()
がその位置アンドロイド:そのIDを指定したリストビュー内のアイテムの位置を取得:
与えられたリストビューにアイテムのIDを取得するために使用するアンドロイド内の関数である逆を行うのいずれかの方法があり、すなわち、アイテムの位置を取得することは、そのIDを与えられたリストビューですか?
いいえ、手動で行う必要があります。使用しているアダプタの内部にパブリックメソッドを作成します。その方法では、アダプタ項目をループし、各項目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;
}
あなたはそれのためのコードを与えることができます? @andrew – user2595281
あなたのアダプタが何を含んでいるかによって決まることを理解する必要があります。それにもかかわらず、上のコードがあります。 –
あなたはどのようにその配列を取得するのか分からない、リストビューとid、与えられた同じ機能を行う方法を教えてくださいできますか? @andrew – user2595281
を同じ(私は確かに言うことができないので、すべてBaseAdapter
サブクラスを見ていない)。 look at the source code for ArrayAdapterの場合、getItemId
は実際にアダプタ内のオブジェクトの位置を返します。位置とIDが同じ場合、別のIDとIDを取得する必要はありません。それ以外の場合は、探しているオブジェクトをアダプターで検索するだけで、位置やIDのどちらかを使用して、別の値を見つけることができます。
あなたが話しているのは、いくつかのユニークなキー(つまり、自分が定義したキー)を使ってオブジェクトを取得している場合です。あなたがする必要があるのはArrayList
の代わりにHashMap
か、オブジェクトの通常List
の代わりにアダプタを設定することです。次に、HashMap
からその値を引くだけで、キーで検索する独自の方法を作成できます。
全くありません。たとえば、CursorAdaptersなどです。すべてではないにしても、ほとんどのカスタムアダプターはもちろんです。値が同じである可能性があるという考えに全く頼らないでください。 HashMapに関しては、それはリストルックアップメソッドの代替です。それはあなたのニーズに依存します。 –
あなたがカスタムアダプターを書いていれば、すべての賭けはオフになっています。 CursorAdapterはとても良い点だとは思わなかった。 HashMapはまだこれを行う最も簡単で最速の方法です。 – Rarw
質問がまだ開いているかどうかわかりません。それにもかかわらず、私は同じことをしようとしている人を助けるために、どうやってそれをしたかを分かち合うつもりだと思った。
ビューのタグ機能を使用して、そのビューの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());
}
。ビューのリファレンスをどのように保持するかは、特定のケースに依存します。
それはあなたがリストビューを持っていて、クリックリスナーで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());
によってそれを得ることができ、たとえば答えるには遅すぎですが、利益のために...
あなたのリストビューを裏づけしているarraylist?私はあなたがこれを達成するために使うことができると確信しています。 – midhunhk