When we implement OnItemClickListener
, we have to implement onItemClick
method which is an abstract method in OnItemClickListener
interface. In onItemClick
method there are four arguments.
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Toast.makeText(this, "Clicked on : " + arg2 + " long arg : " + arg3,
Toast.LENGTH_LONG).show();
}
What I need to know is the difference between last two arguments (int arg2, long arg3
). As you can see in my code, when I try to Toast
it I get the same value for both arguments.
I had the same question as you. However, the answers here were not extremely helpful. I don't support the go-look-it-up-yourself answers, especially when the so called documentation is so unclear. I did look it up myself, though, and the following is what I found.
The int value is the position of the view in the parent. For a ListView
, it is the row number. The top row is position 0, the second row is position 1, the third row is position 2, etc. Note that if your ListView
has a header view (like if you did ListView.addHeaderView(View)
) then the header view would be position 0 and the actual rows would start their numbering at 1.
Sometimes the long value is the same as the int position and sometimes it is different. If you are using an ArrayAdapter
or SimpleAdapter
then they are the same (except in the case that there is a header view and then they are off by one). For a CursorAdapter
(and consequently a SimpleCursorAdapter
) the long id returns the row id of the table, that is, _id
. It is a long rather than an int because a database could theoretically have more rows than an int could hold whereas a ListView
wouldn't.
Here are a few other related answers:
Consider reading the documentation.
The int
is the view position, the long
is the item ID.
(We can't see that you get the same value for both; we only see your code, not your screen.)
The given answers are so helpful. But the needed answer, I mean the exact answer I wanted was posted as a comment for the question by myself. But that wont increase my "accept level". So I thought to put the link as the answer for the question. Here is the link to the answer.
int value represents position of item, and long value represents item 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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With