[安卓基础] 006.打开另一个Activity

打开另一个Activity

这篇文章你会学到的东西:
1、如何给按钮添加响应事件。  
2、创建一个Intent。
3、创建一个新的Activity。
4、点击按钮,打开另一个Activity。
5、接收Intent。
6、用Intent在Activity之间传输信息。


如果你完成了前面的几节课程,你已经创建好了一个app,就像这样:
技术分享
但这个app一点用处都没有,上面的输入框,没有任何的功能,非常的无聊。来,
我们给它加上一些功能,让它变得有趣起来。我们可以往输入框输入一些东西,点击【发送】,就会弹出另一个界面,这个界面上显示的是发送的信息。

给按钮加入响应事件

为了给按钮加入响应事件。我们要做几个事情。

在activity_main.xml中,添加按钮响应方法。

修改activity_main.xml,我们在button标签中,添加onClick属性。sendMessage是这个button点击的时候会执行的方法。如下:

1     <Button
2         android:id="@+id/btn_send_message"
3         android:layout_width="wrap_content"
4         android:layout_height="wrap_content"
5         android:text="@string/button_send"
6         android:onClick="sendMessage" />

那sendMessage的方法,在哪里写,button才能调用的到?答案是:要把这个方法写在button所在的Activity里。
在com.babybus.study.firstapp.MainActivity里,添加sendMessage:

1     public void sendMessage(View v) {
2 
3     }

这样方式写的按钮,响应方法必须有这几点要求:
1. 必须是公共方法
2. 返回参数必须是void类型
3. 只有一个View作为它的参数(这个View其实就是被点击的button。我们在前面的课程已经学过,布局文件上的所有的东西其实都是View或者View Group的子类。)

Note:给按钮添加响应事件,除了上面的写法,还有另外一种方式,就是直接在代码中给button添加响应方法。这种方法,你不需要在xml文件中给按钮增加onClick属性。代码如下:  
        Button mButton = (Button) this.findViewById(R.id.btn_send_message);
        mButton.setOnClickListener(new View.OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // 做响应的事
                
            }
        });

接下来,我们要给这个方法加入一个功能:可以获取输入框中的内容,并把内容发送给另一个Activity。

创建一个Intent

在MainActivity的sendMessage()方法中,我们创建一个Intent来打开DisplayMessageActivity(另一个Activity,这个Activity的创建我们后面会讲到。) 代码如下:

    public void sendMessage(View v) {
        EditText mEditText = (EditText) this.findViewById(R.id.edit_message);
        String message = mEditText.getText().toString();
        Intent intent = new Intent(this, DisplayMessageActivity.class);
    }
Note:此刻这段代码会提示错误,因为我们还没有创建DisplayMessageActivity,没有关系,后面我们会创建它。

Intent,翻译过来是意图的意思。可以用它来给组件们(这里是两个Activity)传递信息。Intent还可以做许多其他的事情,如接受广播机制发送过来的消息等,但最经常的就是用它来在Activity之间传递消息了。
在MainActivity上,我们导入Intent类。

import android.content.Intent;


在sendMessage方法中,我们加入下面的代码:

intent.putExtra(EXTRA_MESSAGE, message);

Intent可以携带extra(它是一个封装了键和值的数据),putExtra()方法中,第一个参数是Key,第二个参数是Value。
我们添加一个静态的成员变量来定义一个EXTRA_MESSAGE。

    public static final String EXTRA_MESSAGE = "com.babybus.study.firstapp.MESSAGE";

为了让另一个Activity能查询到extra,我们对key的定义,建议要定义成公共的静态方法。并且有一个通用的非常好的习惯就是,在定义key值,要加上包名作为前缀。这可以保证在和其他组件或者应用交互的时候,保证key的唯一性。
在sendMessage方法中,我们使用startActivity来发送Intent。调用startActivity方法,安卓系统会接收到一个指令,这个指令告诉系统要打开Intent设定的另一个Activity。至此,sendMessage中完整的代码是这样:

    public void sendMessage(View v) {
        EditText mEditText = (EditText) this.findViewById(R.id.edit_message);
        String message = mEditText.getText().toString();
        Intent intent = new Intent(this, DisplayMessageActivity.class);
        intent.putExtra(EXTRA_MESSAGE, message);
        this.startActivity(intent);
    }

创建另一个Activity

我们创建DisplayMessageActivity。 在DisplayMessageActivity的onCreate方法中,添加如下代码:

package com.babybus.study.firstapp;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class DisplayMessageActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_display_message);
        
    }
}

我们也定义一个DisplayMessageActivity的布局文件,记得在res/layout中创建一个。代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    <TextView 
        android:id="@+id/textview_display_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>

我们创建了一个新的Actiivty,需要在AndroidManifest.xml注册,这个大管家(清单)管理着所有的组件。

        <activity
            android:name="com.babybus.study.firstapp.DisplayMessageActivity"
            android:label="@string/display_message_activity_name" >
        </activity>

到此为止,运行App,点击按钮,就会打开DisplayMessageActivity。但这个时候,如果你在输入框输入内容,点击【发送】,DisplayMessageActivity还是无法展示信息。我们接下来要做的,就是获取MainActivity发送过来的内容,在DisplayMessageActivity的TextView展示出来。

接收Intent

在DisplayMessageActivity的onCreate方法中,我们添加代码:

Intent intent = getIntent();

从Intent获取extra把内容显示出来。

在DisplayMessageActivity的onCreate方法中,我们获得Intent传递过来的内容。并把它展示出来。代码如下:

        String message = intent.getExtras().getString(MainActivity.EXTRA_MESSAGE);
        TextView mTextView = (TextView) this.findViewById(R.id.textview_display_message);
        mTextView.setText(message);

 

至此,一个完整的小应用就做好了。运行app,在输入框输入一些内容,点击【发送】,会在另一个Activity上显示刚才输入的内容。DisplayMessageActivity完整代码如下:

package com.babybus.study.firstapp;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class DisplayMessageActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_display_message);
        
        Intent intent = getIntent();
        String message = intent.getExtras().getString(MainActivity.EXTRA_MESSAGE);
        TextView mTextView = (TextView) this.findViewById(R.id.textview_display_message);
        mTextView.setText(message);
    }
}

 

技术分享 

本站文章为 宝宝巴士 SD.Team 原创,转载务必在明显处注明:(作者官方网站: 宝宝巴士 
转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4551420.html

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。