2012-06-05 4 views
5

私が原因ここで別の答えにこの質問を取得していますが、私はその質問に受け入れられた答えは、私はまた私を作っていますので、私は必要なものである How to get the id of the row in onItemClick(ListView) when using a custom Adapter?CursorAdapterからgetItemId(int pos)メソッドをオーバーライドする方法は?

を求めています何を行う方法を説明していません独自のカスタムアダプター(CursorAdapter)、したがって私は同じ問題があります。問題はそれをどのように達成するのか分かりません。私はDocを見ていて、カーソルから_id列にアクセスする方法がわかりません。 Docには定数がないので、私はそこから情報を得ることができません。それを理解する助けがあれば大いに感謝します。

EDIT:私の質問は明確ではありませんでしたが、タイトルのように、私が作成したCursorAdapterカスタムクラスのgetItemId()メソッドをどのように上書きできますか?

+0

...私はあなたがカーソルからデータを取り、配列に入れ、その後、アレイアダプタを使用した場合、あなたがそれを使用する必要があり、別の時間は次のようになり仮定..しかし、それはかなり遠回りに思えますあなたの問題を理解していない...私はいくつかのカスタムカーソルアダプタを持っている、私はそれをオーバーライドする必要はなかったと私はちょうど良いカーソルから行のIDを取得...あなたは何をしようとしていると取得しようとしているイド? – Barak

+0

リストビューからメンバーをクリックすると、データベースにアクセスしてそのIDを使用してそのメンバー情報にアクセスできるようにしたいと考えています。ですから、実際に_idを取得する必要があります。しかし、私はそうではありません。 – Andy

+0

私はあなたのリストで 'onListItemClick'を使っているのなら、なぜそうでないのか見てみたいと思っています。 – Barak

答えて

9

あなたのアダプタのメンバーとしてカーソルを持っていないと仮定:

@Override 
public long getItemId(int position) { 
    Cursor cursor = getCursor(); 
    cursor.moveToPosition(position); 
    return cursor.getLong(mCursor.getColumnIndex("_id")); 
} 
+0

ああ、getCursorを呼び出すと、CursorAdapterが使用している関連カーソルが得られますか?それが実現したはずです!ありがとう – Andy

+0

はい、ここには[getCursor()](http://developer.android.com/reference/android/widget/CursorAdapter.html#getCursor%28%29)の参考書があります – Sam

+0

そしてSimpleCursorAdapterではなくCursorAdapterを使用している場合newView内の位置を@Overrideのように設定する必要があります。 public View newView(コンテキストコンテキスト、カーソルカーソル、ViewGroup親){ LayoutInflater inflater = LayoutInflater.from(parent.getContext()); ホルダー。deleteImageView =(ImageView)retView.findViewById(R.id.delete); holder.deleteImageView.setTag(cursor.getPosition()); return retView; } ' – Chetna

4

私はこれが提起質問に答えていないnkowが、サムはそれの世話をしました。私はOPの部分にいくつかの混乱があるように思われるので、私はこれを投稿すると思った。続い

カスタムカーソルアダプタで作成されたリストを含むアクティビティからonListItemClick方法であって

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    // Your code here 
} 

long idリストによって供給されたときに行に含まれるデータの行IDが(クリックされますカーソルアダプタ)。 getItemIdを上書きする必要はありません。

異なる行の情報を1行にまとめるなどの操作を行う場合は、getItemIdをオーバーライドするだけで済みます。リスト行のすべてのデータがデータベースの同じ行にある場合は、その問題に行く必要はありません。

Iドン

+0

少なくともデータベースから_idの行です。しかし、私はあなたが言っているものを参照してください。 – Andy

+0

**は行IDです(またはデータベースの列名の点でそれを考えたい場合は_id)。そのため、 '_id'という名前の列は、アダプタを供給するカーソルで*必須*です。フレームワークはそれを使用し、それを渡して、行をクリックしたときに使用できます。 – Barak

+0

ああ落ち着き入力のおかげで。とても有難い。 – Andy

関連する問題