4

我的代码如下:

首先,我想知道第 20 行

我有两个问题:

一个。为什么将MY_MESSAGE分配给com.example.myfirstapp.MESSAGE?湾。什么是com.example.myfirstapp.MESSAGE?C。我曾经在任何地方发过消息;这会像 r.java 文件中的变量一样自动制作,还是我需要在某个地方制作?

其次,关于第 40 行:intent.putExtra(EXTRA_MESSAGE, message);

我不确定此方法是否会向即将调用的活动添加消息或什么...部分,由于不完全了解 Intent 的意义,我很难理解这一点。 我想阅读关于一切是什么的 200 个基本部分,但我已经设定了截止日期,并且我被告知暂时不要为这个项目采用这种方法

鉴于Android Docs的解释,我知道意图是:

Intent本身,一个 Intent 对象,是一个被动的数据结构,持有对要执行的操作的抽象描述

A.) 有人可以解释一下意图的用途或提供一些比文档更好的快速文章吗?

B.) 更清楚地解释 putExtra( ) 的作用以及这些参数:

  • name 额外数据的名称,带有包前缀。
  • value 字符串数组数据值
4

3 回答 3

7

AnIntent被恰当地命名;这是你想要做的。正如文档所说:

它最重要的用途是在活动的启动中,它可以被认为是活动之间的粘合剂。它基本上是一种被动数据结构,包含对要执行的操作的抽象描述。

通过您的代码,您熟悉如何启动Activityvia Intent

new Intent(this, DisplayMessageActivity.class);

这使用您的当前Activity作为启动 的上下文Intent,并提供要启动的目标类。你已经知道了,我想。基本上,这Intent只是 Android 设备遵循的指南,以便它使用正确的信息启动正确的目标。

关于你的真正问题:

  1. “意图是做什么用的?” 如上所述;基本上,它用于告诉操作系统你的目标是什么,它来自哪里,以及它应该提供什么数据。您已经在没有意识到的情况下看到了其中的大部分内容;此构造函数是您一直在使用的构造函数,详细说明了“从”和“到”部分。当您使用 时putExtra,您正在提供Intent它可以提供给代码“to”部分的数据。
  2. name参数最好由文档总结:“额外数据的名称,带有包前缀。” 这就像 a 中的一个键HashMap;它是您要打包的内容的字符串标识符。他们告诉你使用你的包的前缀,只是为了防止混淆。在您的情况下,您应该使用“com.SG.Three_Piece_Radio.YOURKEYNAME”;this 不必在任何地方声明,也不是常量。只是一个字符串。该值只是额外(数据)的内容;这可能有很多不同的东西—— short、、、、int等等。(这些都可以在文档中的各种s找到。)StringParcelableputExtraIntent

收到您Intent的信息后,您可以使用这些相同的数据位(例如,String myStr = getIntent().getStringExtra("com.SG.Three_Piece_Radio.YOURKEYNAME");)并在Activity您调用的内容中对它们做任何您想做的事情。

于 2012-08-15T20:07:10.030 回答
4

我认为人们在这里对 Intent 本身及其目的进行了很好的解释非常有帮助。我必须从这些答案中学到很多东西。

但是,我认为有一个小方面需要更多解释。

因此,要回答您的第一个问题:-

一个。为什么将 MY_MESSAGE 分配给 com.example.myfirstapp.MESSAGE?湾。什么是 com.example.myfirstapp.MESSAGE?C。我曾经在任何地方发过消息;这会像 r.java 文件中的变量一样自动制作,还是我需要在某个地方制作?

我的回答是:-

所以正如所有解释的那样,putExtra 用于携带额外的信息/数据以及将要开始的新活动的意图。putExtra 携带的这些附加信息在 Intent 中以键值对的形式给出。在这个键值对中,键在语法上总是必须是一个字符串。在您的情况下,该值也是一个字符串,“键”可以是任何随机字符串。现在,为了确保系统不会将您的 KEY 与其他应用程序的 KEY 混淆,您应该始终将字符串的整个数据包结构与它一起附加。因此你使用: -

com.example.myfirstapp.MESSAGE

其中MESSAGE实际上是键的名称,(如我上面提到的,所需的字符串)将与将通过意图传递给新活动的字符串值相关联。

现在您也可以很好地编写以下内容:-

intent.putExtra("com.example.myfirstapp.MESSAGE", message);

代替 :-

intent.putExtra(EXTRA_MESSAGE,消息);

但这会降低代码的灵活性,以便以后进行更改。至于密钥名称的任何更改,您将不得不在任何地方进行更改。因此,为了避免这种情况,我们宁愿将密钥的名称(在您的情况下为MESSAGE)分配给 String 变量(在您的情况下为 EXTRA_MESSAGE)。

这也使得其他活动更容易通过一个简单的字符串变量来引用这个键。因此,为了使其可用于其他活动(加上其他自我解释的功能),您将其设置为:-

public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";

如果我碰巧错过了什么或在某个地方出错了,请纠正我。

于 2014-04-17T21:49:18.807 回答
3

Intent 最常见的用途是在应用程序中启动新的活动(屏幕)(第 41 行)。extras Bundle 是在活动之间传递数据的一种方式。Extras 作为键值对输入,因此 EXTRA_MESSAGE 是一个键,用于标识特定值,以便其他活动可以检索和使用它。

于 2012-08-15T20:05:58.557 回答