Android学习笔记(六)通过Intent启动其他Activity

     在一个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,如图:
Android学习笔记(六)通过Intent启动其他Activity_第1张图片 
工程名处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,如图:
Android学习笔记(六)通过Intent启动其他Activity_第2张图片      

你可能感兴趣的:(Android学习笔记(六)通过Intent启动其他Activity)