在一个Android应用中,一般都不只一个Activity对象,那么怎么去通过一个Activity启动另外一个Activity呢,或者将当前Activity的数据传到另外的Activity中,或者从其他Activity中获取值,或者启动Android系统中的其他应用呢?这里就要用到Intent对象,intent我们称之为“意图”它携带了我们执行的动作或信息,其实就是相当于网络中的packet数据包(暂且这样理解),就是用来传递命令和数据的,它在两个Activtiy中起到桥梁作用。
这里通过启动另外一个Activity ,并将当前Activity 的数据传送到另外一个Activity 上。
在helloWorld中我们编写了一个文本输入框和send按钮的Activity,这里我们再编写一个Activity,java文件为DisplayMessageActivity.java ,来显示前一个Activity发送的内容。
a、为按钮添加事件响应
为了将Activity A上的数据能传送,我们得先响应按钮事件,
在activity_main.xml布局文件中button元素添加上
android:onClick属性,修改后如下:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage" />
android:onClick属性值为sendMessage,"sendMessage"为MainActivity.java类中的一个方法,用来响应Button的点击事件。
在MainActivity.java文件中加上方法sendMessage,如下:
/** 该方法将在用户点击了send Button时调用*/
public void sendMessage(View view) {
// Do something in response to button
}
为了响应onClick,该方法必须满足下列条件:
方法必须为public的;
返回值必须为空(void)
有且仅有一个View类型的参数(该参数即为当前OnClick事件的源source)
b、构建意图(Intent)
这里我们在上面的sendMessage方法中添加一个意图(Intent),来启动封装我们要发送的数据;如下:
//DisplayMessageActivity.class 这里表示要启动该Activity Intent intent = new Intent(this, DisplayMessageActivity.class); //通过findViewById方法来从布局文件中找到对应的viwe对象 EditText editText = (EditText) findViewById(R.id.edit_text); String message = editText.getText().toString();//获取eidtText的数据 intent.putExtra(EXTRA_MESSAGE, message);//设置到intent对象上 startActivity(intent);//调用startActivity方法执行intent来启动DisplayMessageActivity
EXTRA_MESSAGE 为我们为当前消息设置的一个key值,该值用来唯一标识当前消息,其他Activity就可以通过这个标识key来获取消息内容。
这里我们在当前Activity中定义为:
public final static String EXTRA_MESSAGE = "com.example.helloword.MESSAGE";
在前面加上包前缀,主要是用于唯一标示该key。
c、创建第二个Activity即DisplayMessageActivity
在工具栏中选择new
按钮
,在弹出的对话框中选择Android ->Android Activity,如图:
点击next,如图:
工程名处Project我们选择HelloWord
Activity Name处输入:DisplayMessageActivity
Layout Name输入activity_diskplay_message
Title 即为Activity显示时的标题栏类容,这里默认的是显示DisplayMessageActivity.
点击Finish,成功创建好了DisplayMessageActivity.java文件和对应的布局文件。
打开DisplayMessageActivity.java文件,此时我们看到系统自动把对应的layout设置上了,onCreate初始代码为:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_message);
}
d、解析并呈现Intent内容
在onCreate中,通过方法getIntent来获取并解析出从ActivityMain 中传来的数据。
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
数据获取到后,我们通过一个TextView将其显示出来;
修改后的onCreate方法如下:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 从intent中获取数据
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
TextView textView = new TextView(this);
textView.setTextSize(40);
textView.setText(message);
//设置textView为当前的contentView
setContentView(textView);
}
e、在AndroidManifest.xml中声明新加的Activity,即DisplayMessageActivity
前面说了,任何要需要再系统中呈现的Activity都必须在AndroidManifest.xml中通过activity元素进行声明。
打开AndroidManifest.xml文件,我们看到DisplayActivity系统已经为我们声明了,如果系统没有自动添加,则需要我们手动加上:
<activity
android:name="com.example.helloword.DisplayMessageActivity"
android:label="@string/title_activity_display_message" >
</activity>
f、运行程序
现在就可以运行我们的程序了。运行后,在文本输入框中输入Hello world 点击send按钮,则会跳转到另外一个Activity去,并显示出了Hello world,如图: