在我的LandingClass(包含一个名为myList的ListView)中,每当单击ListView中的一项时,我们都想触发另一个活动(DetailedActivity),因此代码应如下所示:
myList.setOnItemClickListener{ view ->
val intent = Intent(this, DetailedActivity::class.java)
startActivity(intent)
}
现在,如果我们需要向Detailed类提供其他(额外)信息,例如我们刚刚单击的ListView中元素的位置,则代码如下所示:
myList.setOnItemClickListener{ parent, view, position, id ->
val intent = Intent(this, DetailedActivity::class.java)
intent.putExtra("thePosition (text)", position)
startActivity(intent)
}
所以我的问题是,为什么要发送额外的意图,我们需要一个父代和一个id,我看不到它们在任何地方都被使用了...?
我在文档中看不到一些帮助我理解的示例。所以有一些问题:
我需要什么父母,视图和身份证?
如果我单击第3个元素,则如果列表基于0索引,则发送的位置(int)我希望为2,对吗?
如果我想发送包含比职位更复杂的信息的捆绑包,我的代码(含额外内容)将如何更改?考虑到所有参数都具有定义的类型,例如id为long类型。如果我想发送一段文本而不是id呢?
https://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener-显示方法签名的官方文档
根据我的研究(请参见上面的链接),我注意到:
父AdapterView:单击发生的AdapterView。
view视图:AdapterView中被单击的视图(这将是适配器提供的视图)
position int:视图在适配器中的位置。
id long:单击的项目的行ID。
但这仍然不能阐明如何将其他复杂信息发送到DetailedActivity-不是位置(int)或id(long),而是可能是一组复杂对象,一段文本或其他内容...
答案 0 :(得分:0)
假设您的ListView
包含一些新闻文章的标题。
通过单击列表项,您想要重定向到详细信息活动,您可以在其中阅读文章的全文。
所有标题和文章都存储在List
个对象的Article
中,每个对象都包含文章的标题和文本。
您如何确定点击了哪篇文章的标题?
这就是参数position
和id
的目的。
根据您的需要,您可以选择其中一种,因此您将从List
取文章的文本,并将其作为额外的内容传递到Intent
,以打开详细信息活动。
< br />
您知道您可以创建非常复杂的ListView
,其中每个项目都是多个视图的容器或ListView
本身。
这是您需要parent
和view
自变量的时候。
所有这些都是特定于应用的。
如果您不需要它,那么可以在需要和何时使用它们的情况下使用这些参数。
现在用于:
如果我想发送包含更复杂信息的
Bundle
和
但这仍然无法说明如何向 DetailsActivity
您有责任构造Serializable
或Parcelable
Bundle
,并将其作为Intent
的附加内容,与{的可用参数无关{1}}。
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?
遵循标准,您将可以通过意图发送此复杂信息。