В чем разница между аргументом 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 это я получаю одинаковое значение для обоих аргументов.

5 ответов

Решение

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

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

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

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

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

Попробуйте прочитать документацию.

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

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

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

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.

На мой взгляд, через позицию вы можете получить элемент строки с помощью адаптера getItem(position). Итак, позиция означает положение данных в адаптере.

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

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

Другие вопросы по тегам