我的代码为follows:
首先,我想知道第20行:
我有两个问题:
一个。为什么 MY_MESSAGE 分配给 com.example.myfirstapp.MESSAGE ? 湾什么是 com.example.myfirstapp.MESSAGE ? C。我在任何地方都做过MESSAGE;这是自动制作的,就像r.java文件中的变量一样,还是我需要在某个地方制作?
其次,关于第40行:intent.putExtra(EXTRA_MESSAGE,message); 的
我不确定这个方法是否会为即将要调用的活动添加消息或者是什么......部分由于不完全了解Intent的意义,我很难理解这一点。 我想阅读我关于一切内容的200个基本部分,但我已设定截止日期,并且我被告知暂时不要采用这种方法进行此项目
在给出Android Docs的解释后,我知道其意图是:
Intent 本身是一个Intent对象,是一个被动数据结构,包含要执行的操作的抽象描述
A。)有人可以解释一下这个意图的用途,或者提供一些比文档更好的快速文章吗?
B.)解释putExtra()的作用以及这些参数更清楚:
答案 0 :(得分:6)
Intent
被恰当地命名;这就是你想要做的。正如the documentation所说:
其最重要的用途是开展活动,可以将其视为活动之间的粘合剂。它基本上是一个被动数据结构,包含要执行的动作的抽象描述。
根据您的代码,您熟悉通过Activity
:
Intent
new Intent(this, DisplayMessageActivity.class);
这会使用您当前的Activity
作为启动Intent
的上下文,并提供要启动的目标类。我想你已经知道了。基本上,Intent
只是Android设备可以遵循的指南,因此它可以使用正确的信息启动正确的目标。
在您真正的问题上:
putExtra
时,您向Intent
提供了可以为代码的“至”部分提供的数据。name
参数最好由文档总结:“额外数据的名称,带包前缀。”这就像HashMap
中的一个关键词;它是您要打包的内容的字符串标识符。他们告诉你使用你的包的前缀,只是为了防止混淆。在您的情况下,您应该使用“com.SG.Three_Piece_Radio.YOURKEYNAME”;这不必在任何地方声明,也不是常数。只是一个字符串。该值只是额外内容(数据);这可能是很多不同的事情 - short
,int
,String
,Parcelable
等等。 (这些都可以在the Intent
docs中的各种putExtra
中找到。)收到Intent
后,您可以使用相同的数据位(例如String myStr = getIntent().getStringExtra("com.SG.Three_Piece_Radio.YOURKEYNAME");
),并在您调用的Activity
中随意执行任何操作。
答案 1 :(得分:3)
意图最常见的用途是在应用程序中启动新活动(屏幕)(第41行)。附加组件Bundle是一种在活动之间传递数据的方法。额外输入作为键值对输入,因此EXTRA_MESSAGE是一个用于标识特定值的键,以便其他活动可以检索和使用它。
答案 2 :(得分:3)
我认为人们在这里对Intent本身及其目的作出了很好的解释。我从这些答案中学到了很多东西。
然而,我认为还有一个小方面需要更多解释。
所以回答你的第一个问题: -
一个。为什么将MY_MESSAGE分配给com.example.myfirstapp.MESSAGE?湾什么是com.example.myfirstapp.MESSAGE? C。我在任何地方都做过MESSAGE;这是自动制作的,就像r.java文件中的变量一样,还是我需要在某个地方制作?
我的回答是: -
因此,正如所有解释的那样,putExtra用于携带额外的信息/数据以及将要开始的新活动的意图。 putExtra携带的这些附加信息在Intent中以Key-Value对的形式给出。 在此Key-Value对中,Key语法总是必须是String。 在您的情况下,该值也是一个字符串,“键”可以是任何随机字符串。 现在,为了确保系统不会将KEY与其他应用程序的KEY混淆,您应该始终将字符串的整个数据包结构与其一起附加。因此你使用: -
com.example.myfirstapp.MESSAGE
其中 MESSAGE 实际上是键的名称(如上所述,所需的字符串),它将与将意图传递给新字符串的字符串值相关联活动。
现在你也可以写好以下内容: -
intent.putExtra("com.example.myfirstapp.MESSAGE", message);
而不是: -
intent.putExtra( EXTRA_MESSAGE,消息);
但是这会降低代码的灵活性,以便稍后进行更改。至于密钥名称的任何更改,您将不得不在任何地方进行更改。因此,为了避免这种情况,我们宁愿将键的名称(在您的情况下, MESSAGE )分配给String变量(在您的情况下为 EXTRA_MESSAGE )。
这也使其他活动更容易通过简单的String变量引用此键。因此,为了使其可以访问其他活动(加上其他自我解释的功能),您可以将其设为: -
public final static 字符串EXTRA_MESSAGE =“com.example.myfirstapp.MESSAGE”;
如果我碰巧在某处错过了某些地方或出了问题,请纠正我。