我一直在尝试Android开发,并继续使用http://developer.android.com/给出的指南,我遇到了putExtra(),并想知道是否有人可以向我解释这个功能的作用是什么?以下代码如何工作?
发送:
Intent intent = new Intent(this, DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.edit_message);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
接收:
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
这个代码中的2个函数getStringExtra和putExtra是如何工作的?
答案 0 :(得分:2)
Intent intent = new Intent(this, DisplayMessageActivity.class); // sets target activity
EditText editText = (EditText) findViewById(R.id.edit_message); // finds edit text
String message = editText.getText().toString(); // pull edit text content
intent.putExtra(EXTRA_MESSAGE, message); // shoves it in intent object
让我们说这是活动A,你的DisplayMessageActivity =活动B
在这种情况下,您从活动A获取编辑文本内容,并使用Intent对象将其内容传递给活动B.活动B,对值感兴趣必须将它从intent对象中拉出来,所以它通常会在onCreate()中执行以下操作:
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
这通常是快乐但常见的情况。
但是,如果活动B已存在于后台堆栈中,并且活动A想要清除后台堆栈以再次到达活动B,则活动B将在其onNewIntent(Intent theNewIntent)中提供新意图方法,您必须在活动B中覆盖以查看此新意图。否则你将被困在处理活动B最初收到的原始意图。
<强>已更新强>
听起来您对意图的内部感兴趣,以及如何获得意图的“EXTRA_MESSAGE”部分。意图存储键值对,因此如果您想获得关键部分something like the following would work:
for (String key : bundle.keySet()) {
Object value = bundle.get(key);
Log.d(TAG, String.format("%s %s (%s)", key,
value.toString(), value.getClass().getName()));
}
内部的快速概述是Intents使用Android的IPC(进程间通信)。本质上,OS友好的唯一数据类型是原始类型(int,long,float,boolean等),这就是putExtra()允许您仅存储基元的原因。但是,putExtra()也容忍parcelables,并且任何将自身定义为Parcelable的对象基本上定义了Java对象如何逐渐渗透到其原语,允许意图再次处理这些友好的数据类型,所以没有魔法。这很重要,因为Intents充当Binder层的包装器。 Binder层是Intent对象的底层结构,并且此实现位于Android的本机层(c / c ++部分)中。实际上,本机层处理编组/解组回到java层,其中Activity B获取数据。
答案 1 :(得分:0)
如果没有弄错它只是键值对https://searchenterprisedesktop.techtarget.com/definition/key-value-pair 。这只是表明这个id(密钥)是2(值)。从另一个活动中,您可以通过密钥(id)获得价值发现,即
活动B. Intent intent = getIntent();
String id = intent.getStringExtra(&#34; id&#34;);