15

を実装するときは、インターフェースに抽象メソッドであるメソッドOnItemClickListenerを実装する必要があります。メソッドには4つの引数があります。onItemClickOnItemClickListeneronItemClick

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    Toast.makeText(this, "Clicked on : " + arg2 + " long arg : " + arg3, 
                   Toast.LENGTH_LONG).show();
}

私が知る必要があるのは、最後の2つの引数()の違いint arg2, long arg3です。私のコードでわかるように、Toastそれを実行しようとすると、両方の引数に対して同じ値が得られます。

4

5 に答える 5

35

私はあなたと同じ質問をしました。ただし、ここでの回答はあまり役に立ちませんでした。特に、いわゆるドキュメントが非常に不明確な場合は、go-look-it-up-yourselfの回答をサポートしません。しかし、私はそれを自分で調べました、そして以下は私が見つけたものです。

int値は、内のビューの位置です。の場合、これは行番号です。上の行は位置0、2番目の行は位置1、3番目の行は位置2などです。ヘッダービューがある場合(ある場合のように)、ヘッダービューは位置0になり、実際の行は位置になります。 1から番号付けを開始します。ListViewListViewListView.addHeaderView(View)

long値がint位置と同じ場合もあれば、異なる場合もあります。ArrayAdapterまたはを使用している場合SimpleAdapter、それらは同じです(ヘッダービューがあり、1つずれている場合を除く)。a CursorAdapter(およびその結果としてa SimpleCursorAdapter)の場合、long idはテーブルの行ID、つまり。を返します_id。理論的には、データベースにはintが保持できるよりも多くの行が含まれる可能性があるのに対し、aは保持できないため、 intではなくlongになります。ListView

その他の関連する回答は次のとおりです。

于 2014-09-02T11:31:24.157 に答える
3

ドキュメントを読むことを検討してください。

intビュー位置、longはアイテムIDです。

(両方で同じ値が得られることはわかりません。画面ではなく、コードのみが表示されます。)

于 2011-11-22T05:08:36.460 に答える
2

与えられた答えはとても役に立ちます。しかし、必要な答えは、私が望んでいた正確な答えが自分で質問へのコメントとして投稿されたことを意味します。しかし、それは私の「受け入れレベル」を上げることはありません。そこで、質問の答えとしてリンクを張ろうと思いました。これが答えへのリンクです。

于 2012-06-14T10:48:10.233 に答える
1

int値はアイテムの位置を表し、long値はアイテムIDを表します。

public abstract void onItemClick (AdapterView<?> parent, View view, int position, long id)

parent      The AdapterView where the click happened.
view        The view within the AdapterView that was clicked
            (this will be a view provided by the adapter)
position    The position of the view in the adapter.
id          The row id of the item that was clicked.
于 2011-11-22T05:10:02.770 に答える
1

私の意見では、位置を介して、アダプターのgetItem(position)を使用して行アイテムを取得できます。したがって、位置とは、アダプター内のデータ位置を意味します。

idパラメーターについては、ご存知のように、アダプター内のデータは常にレコーダーであるため、これはヘルプメソッドだと思います。一般的に、レコーダーにはid列(データベースIDのようなもの)が必要です。コーディングするときは、位置からアイテムを取得してから、アイテムのIDを取得できます(アイテムにIDがある場合)。ただし、このような「id」は「id」パラメータを使用して直接取得できます。お気づきかもしれませんが、位置は「int」タイプで、「id」は「long」タイプです。

ちなみに、idパラメータを使用する場合は、アダプタにgetItemId()メソッドを実装する必要があります。ArrayAdapterのデフォルトの実装は、位置を返すだけです。

于 2013-12-11T02:42:34.100 に答える