具有额外功能的意图具有一系列我们不使用的参数-它们的目的是什么?

时间:2019-04-13 12:34:45

标签: kotlin

在我的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,我看不到它们在任何地方都被使用了...? 我在文档中看不到一些帮助我理解的示例。所以有一些问题:

  1. 我需要什么父母,视图和身份证?

  2. 如果我单击第3个元素,则如果列表基于0索引,则发送的位置(int)我希望为2,对吗?

  3. 如果我想发送包含比职位更复杂的信息的捆绑包,我的代码(含额外内容)将如何更改?考虑到所有参数都具有定义的类型,例如id为long类型。如果我想发送一段文本而不是id呢?

https://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener-显示方法签名的官方文档

根据我的研究(请参见上面的链接),我注意到:

  

父AdapterView:单击发生的AdapterView。

  1. 我们为什么需要这个?分配在哪里完成,还是隐式知道?
  

view视图:AdapterView中被单击的视图(这将是适配器提供的视图)

     

position int:视图在适配器中的位置。

     

id long:单击的项目的行ID。

但这仍然不能阐明如何将其他复杂信息发送到DetailedActivity-不是位置(int)或id(long),而是可能是一组复杂对象,一段文本或其他内容...

1 个答案:

答案 0 :(得分:0)

假设您的ListView包含一些新闻文章的标题。
通过单击列表项,您想要重定向到详细信息活动,您可以在其中阅读文章的全文。
所有标题和文章都存储在List个对象的Article中,每个对象都包含文章的标题和文本。
您如何确定点击了哪篇文章的标题?
这就是参数positionid的目的。
根据您的需要,您可以选择其中一种,因此您将从List取文章的文本,并将其作为额外的内容传递到Intent,以打开详细信息活动。
< br /> 您知道您可以创建非常复杂的ListView,其中每个项目都是多个视图的容器或ListView本身。
这是您需要parentview自变量的时候。

所有这些都是特定于应用的

如果您不需要它,那么可以在需要和何时使用它们的情况下使用这些参数。

现在用于:

  

如果我想发送包含更复杂信息的Bundle


  

但这仍然无法说明如何向   DetailsActivity

您有责任构造SerializableParcelable 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?
遵循标准,您将可以通过意图发送此复杂信息