В чем разница между аргументом "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 просто возвращает позицию.