在我的LandingClass (其中包含一个名为myList的ListView )中,每当单击来自ListView的项时,我们都希望触发另一个活动(DetailedActivity),因此代码应该如下所示:
现在,如果我们需要向详细的类提供额外的(额外)信息,比如我们刚才单击的myList.setOnItemClickListener{ view -> val intent = Intent(this, DetailedActivity::class.java) startActivity(intent) }中的元素的位置,代码将如下所示:myList.setOnItemClickListener{ parent, view, position, id -> val intent = Intent(this, DetailedActivity::class.java) intent.putExtra("thePosition (text)", position) startActivity(intent) },所以我的问题是,为什么在发送额外的意图时,我们需要一个父类和一个id,我看不到它们在任何地方被使用.?我在医生中没有看到一些帮助我理解的例子。所以有些问题:
https://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener -显示方法签名的官方文档
从我的研究(见上面的链接)中我注意到:
父AdapterView:发生单击的AdapterView。
视图视图:单击AdapterView中的视图(这将是适配器提供的视图) 位置int:视图在适配器中的位置。 id long:单击的项的行id。
不过,这并没有说明如何向DetailedActivity发送额外的复杂信息--不是位置(int)或id (long),而是可能是一个复杂对象数组,或者一段文本或其他什么.
发布于 2019-04-13 13:46:53
假设您的ListView包含一些新闻文章的标题。
通过单击列表项,您希望重定向到可以阅读文章全文的详细信息活动。
所有标题和项目都存储在List of Article对象中,每个对象都包含文章的标题和文本。
如何识别单击了哪个项目的标题?
这就是参数position和id的目的。
根据您的需要,您将选择一个或另一个,因此您将从List中获取文章的文本,并将其作为额外的内容传递给打开details活动的Intent。
您知道可以创建非常复杂的ListView,其中每个项都是多个视图的容器或ListView本身。
这时您将需要parent和view参数。
所有这些都是特定于应用程序的。
如果你不需要它,但是参数是在你需要的时候使用的。
现为:
如果我想发送一个包含更复杂信息的
Bundle
和
不过,这并没有说明如何向DetailedActivity发送额外的复杂信息
这是您构建Serializable或Parcelable Bundle的责任,并将其作为Intent的附加项,与setOnItemClickListener的可用参数无关。
这里有很多示例,在SO和其他站点中,可以将对象序列化为额外的对象,如
Cannot pass custom Object in an Intent: The Method Put Extra is Ambiguous for the type Intent
和
How to send an object from one Android Activity to another using Intents?
遵循这些标准,你将能够通过意图发送这个复杂的信息。
https://stackoverflow.com/questions/55665493
复制相似问题