5

ここで別の回答があったため、この質問を受けていますが、私が求めていることを行う方法を説明していませんでし た カスタムアダプタを使用するときにonItemClick(ListView)で行のIDを取得する方法

その質問で受け入れられた答えは、独自のカスタムアダプター (CursorAdapter) も作成しているため、必要なものです。したがって、同じ問題が発生します。問題は、それを達成する方法がわからないことです。ドキュメントを見ていますが、カーソルから _id 列にアクセスする方法がわかりません。Doc にはその情報を取得できる定数がないため、行き詰まっています。それを理解する助けがあれば大歓迎です。

編集:質問の内容が明確ではありませんでしたが、明確にするために、タイトルのように、作成した CursorAdapter カスタム クラスの getItemId() メソッドをオーバーライドするにはどうすればよいですか?

4

2 に答える 2

9

アダプターのメンバーとして Cursor を持っていないと仮定します。

@Override
public long getItemId(int position) {
    Cursor cursor = getCursor();
    cursor.moveToPosition(position);
    return cursor.getLong(mCursor.getColumnIndex("_id"));
}
于 2012-06-05T03:55:43.493 に答える
4

私はこれが提起された質問に答えていないことを知っていますが、サムはそれを処理しました. OP部分に混乱があるように見えるので、これを投稿すると思いました。

以下はonListItemClick、カスタム カーソル アダプターで作成されたリストを含むアクティビティのメソッドです。

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

long idクリックされた行に含まれるデータの行 ID です (リストがカーソル アダプタによって供給される場合)。オーバーライドする必要はありませんgetItemId

getItemId異なる行からの情報を1行に入れるようなことをする場合にのみ、(私の経験では)オーバーライドする必要があります。リスト行のすべてのデータがデータベース内の同じ行からのものである限り、そのような手間をかける必要はありません。

別の機会に使用する必要があるのは、カーソルからデータを取得して配列に入れ、配列アダプターを使用した場合だと思います..しかし、それはかなり回り道のようです...

于 2012-06-05T04:13:01.293 に答える