В чем разница между аргументом "int" и "long" в onItemClick в Android?

Когда мы реализуем OnItemClickListener, мы должны реализовать метод onItemClick, который является абстрактным методом в интерфейсе OnItemClickListener. В методе onItemClick существует четыре аргумента.

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

Мне нужно знать разницу между двумя последними аргументами (int arg2, long arg3). Как вы можете видеть в моем коде, когда я пытаюсь Toast, я получаю одинаковое значение для обоих аргументов.

Ответ 1

Данные ответы настолько полезны. Но нужный ответ, я имею в виду точный ответ, который я хотел, был опубликован как комментарий для вопроса сам. Но это не увеличит мой "уровень принятия". Поэтому я решил поставить ссылку в качестве ответа на вопрос. Ниже приведена ссылка .

Ответ 2

У меня был тот же вопрос, что и вы. Однако ответы здесь не были чрезвычайно полезными. Я не поддерживаю ответы "на ходу", особенно когда так называемая документация настолько неясна. Однако я сам это просмотрел, и вот что я нашел.

Значение int - это позиция представления в родительском. Для ListView это номер строки. Верхняя строка - позиция 0, вторая строка - позиция 1, третья строка - позиция 2 и т.д. Обратите внимание, что если ваш ListView имеет вид заголовка (например, если вы сделали ListView.addHeaderView(View)), то представление заголовка будет позицией 0 и фактические строки начнут свою нумерацию в 1.

Иногда значение длинное совпадает с положением int, и иногда оно отличается. Если вы используете ArrayAdapter или SimpleAdapter, то они одинаковы (кроме случаев, когда есть вид заголовка, а затем они отключены одним). При a CursorAdapter (и, следовательно, a SimpleCursorAdapter) идентификатор long возвращает идентификатор строки таблицы, то есть _id. Это длинный, а не int, потому что у базы данных теоретически может быть больше строк, чем int, тогда как ListView не будет,

Вот несколько других связанных ответов:

Ответ 3

Рассмотрите возможность чтения документации.

int - это позиция представления, long - это идентификатор элемента.

(Мы не можем видеть, что вы получаете одинаковое значение для обоих: мы видим только ваш код, а не ваш экран.)

Ответ 4

Значение int представляет позицию элемента, а значение длинное представляет элемент 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.

Ответ 5

По моему мнению, через позицию вы можете получить строку с адаптером getItem (position). Таким образом, позиция означает положение данных в адаптере.

Для параметра id, я думаю, что это метод помощи, как вы знаете, данные в адаптере всегда являются рекордерами. вообще говоря, рекордер должен иметь столбец id (что-то вроде идентификатора базы данных). при кодировании вы можете получить элемент через позицию, затем получить идентификатор элемента (если элемент имеет идентификатор). но вы можете получить такой "id" напрямую с параметром "id" . вы можете заметить: позиция является "int", тогда как "id" является "длинным" типом.

Кстати, если вы хотите использовать параметр id, вам необходимо реализовать метод getItemId() в адаптере. реализация по умолчанию в ArrayAdapter просто возвращает позицию.