我刚开始阅读Head First Android Development,我对第3章中的代码感到困惑。
第一个活动 CreateMessageActivity 正在向第二个活动 ReceiveMessageActivity 发送一个意图,到目前为止一直很好。
public class CreateMessageActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create_message);
}
// Call this when the button is clicked
public void onSendMessage(View view)
{
EditText messageView = (EditText)findViewById(R.id.message);
String messageText = messageView.getText().toString();
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, messageText);
String chooserTitle = getString(R.string.chooser);
Intent chosenIntent = Intent.createChooser(intent, chooserTitle);
startActivity(chosenIntent);
}
}
第二个活动 ReceiveMessageActivity 从第一个活动 CreateMessageActivity 获取意图。
public class ReceiveMessageActivity extends Activity
{
public static final String EXTRA_MESSAGE = "message";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_receive_message);
Intent intent = getIntent();
String messageText = intent.getStringExtra(EXTRA_MESSAGE);
TextView messageView = (TextView)findViewById(R.id.message);
messageView.setText(messageText);
}
}
我无法理解常量EXTRA_MESSAGE。如果我将“消息”更改为“asdfwerf324wd23”之类的代码,代码仍然可以编译并运行而不会出现问题。即使我删除常量EXTRA_MESSAGE并给intent.getStringExtra一个随机的“名称”,该应用程序也能正常工作。这个常数的目的是什么?
我必须提到我对Android / Java编程有些新意,我正在尝试理解类之间的联系。
答案 0 :(得分:0)
常量定义要在包中查找的键。
捆绑包基本上(在核心)包含具有关联值的键的映射。如果密钥不存在,则返回null。意味着如果没有任何内容与键的给定值一起传递,方法get[type]Extra
将返回null。
您可以将null设置为TextView的文本,而不会抛出任何异常。在TextView代码中,如果字符串为空,则将其设置为""
。基本上是这样的:
String messageText = intent.getStringExtra(EXTRA_MESSAGE);//this ends up being null
TextView messageView = (TextView)findViewById(R.id.message);
messageView.setText(messageText);//and this sets the text to ""
无论您选择哪个键,它的工作原理都是因为它返回null。但是,如果您没有使用该密钥发送任何内容,则在检索它时它将永远不会有实际值,并且TextView将为空