У интентов с статистами есть ряд параметров, которые мы не используем - какова их цель? - PullRequest
0 голосов
/ 13 апреля 2019

Из моего LandingClass (который содержит ListView, называемый myList), при каждом щелчке по элементу из ListView мы хотим запустить другое действие (DetailActivity), поэтому код должен выглядеть следующим образом:

myList.setOnItemClickListener{ view -> val intent = Intent(this, DetailedActivity::class.java) startActivity(intent) } Теперь, если нам нужно было предоставить дополнительную (дополнительную) информацию классу «Подробно», например, позицию элемента из ListView, которую мы только что щелкнули, код будет выглядеть следующим образом: myList.setOnItemClickListener{ parent, view, position, id -> val intent = Intent(this, DetailedActivity::class.java) intent.putExtra("thePosition (text)", position) startActivity(intent) } Так что мой вопрос - почему в случаедля отправки дополнительного намерения нам нужны родитель и идентификатор, я не вижу их где-либо использовать ...?Я не вижу примеров в документе, которые бы помогли мне понять.Итак, некоторые вопросы:

  1. Для чего мне нужен родитель, представление и идентификатор?

  2. Если я щелкну по 3-му элементу, отправленная позиция (int), как я ожидаю, будет равна 2, если список основан на 0-индексе, верно?

  3. Если бы я хотел отправить Пакет с более сложной информацией, чем позиция, как бы изменился мой код (с дополнительным)?Учитывая, что все параметры имеют определенный тип, например, id - это тип long.Что, если я хочу отправить текстовый абзац вместо идентификатора?

https://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener - официальные документы, показывающие подпись метода

Из моего исследования(см. ссылку выше) Я заметил, что:

parent AdapterView: AdapterView, где произошел щелчок.

Зачем нам это нужно?Где выполняется задание или оно неявно известно?

представление Представление: представление в AdapterView, по которому щелкнули (это будет представление, предоставляемое адаптером)

position int: Положение представления вадаптер.

id long: идентификатор строки элемента, по которому был выполнен щелчок.

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

1 Ответ

0 голосов
/ 13 апреля 2019

Скажите, что ваш ListView содержит заголовки некоторых новостных статей.
Нажав на элемент списка, вы хотите быть перенаправлены на подробный вид деятельности, где вы можете прочитать полный текст статьи.
Все заголовки и статьи хранятся в List из Article объектов, каждый из которых содержит заголовок и текст статьи.
Как вы узнаете, по какому заголовку статьи щелкнули?
Это цель аргументов position и id.
В зависимости от ваших потребностей вы будете выбирать один или другой, поэтому вы получите из текста List текст статьи и передадите его как дополнительный элемент в Intent, который открывает действие сведений.

Вы знаете, что вы можете создавать очень сложные ListView s, где каждый элемент представляет собой контейнер с несколькими представлениями или сам ListView.
Это когда вам понадобятся аргументы parent и view.

Все это приложение .

Если вам это не нужно, но есть аргументы, которые вы можете использовать, если и когда они вам понадобятся.

Теперь для:

Если бы я хотел отправить Bundle с более сложной информацией

и

Тем не менее, это не проясняет, как отправить дополнительную сложную информацию DetailedActivity

Вы несете ответственность за создание Serializable или Parcelable Bundle и добавление его в качестве дополнительного к Intent, и оно не имеет ничего общего с доступными аргументами setOnItemClickListener.
В SO и на других сайтах приведено множество примеров для сериализации объектов, добавляемых в качестве дополнений, например,
Невозможно передать пользовательский объект в намерении: метод Put Extra является неоднозначным для типа Intent
и
Как отправить объект из одного Android-действия в другое с помощью Intents?
Следуйте стандартам, и вы сможете отправить эту сложную информацию через намерение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...