Skip to content

Most visited

Recently visited

navigation

启动另一个 Activity

完成上一课的学习后,您已构建了一个应用,它可以显示一个 Activity(单一屏幕)并带有一个文本字段和一个按钮。在本课中,您将向 MainActivity 添加一些代码,这些代码可在用户点按 Send 时启动一个新的 Activity 来显示消息。

:本课假设您使用 Android Studio 2.3 或更高版本。

响应 Send 按钮

按照以下步骤操作,在 MainActivity.java 中添加一个由按钮调用的函数:

  1. 在文件 app > java > com.example.myfirstapp > MainActivity.java 中,添加 sendMessage() 函数存根,如下所示:
    public class MainActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        /** Called when the user taps the Send button */
        public void sendMessage(View view) {
            // Do something in response to button
        }
    }

    您可能会看到一条错误,因为 Android Studio 无法解析用作函数参数的 View 类。因此,请点击,将您的光标放置在 View 声明上,然后按 Alt + Enter(在 Mac 上,则按 Option + Return),执行快速修复。(如果出现一个菜单,请选择 Import class。)

  2. 现在,返回到 activity_main.xml 文件,从按钮调用此函数:
    1. 在布局编辑器中点击以选择按钮。
    2. Properties 窗口中,找到 onClick 属性并从下拉列表中选择 sendMessage [MainActivity]

现在,当点按按钮时,系统将调用 sendMessage() 函数。

记下此函数中的详细信息,要让系统将此函数视为与 android:onClick 属性兼容,需要这些详细信息。具体来说,函数必须声明以下内容:

接下来,您需要填写此函数以读取文本字段的内容,并将该文本传递给另一个 Activity。

构建一个 Intent

Intent 是指在相互独立的组件(如两个 Activity)之间提供运行时绑定功能的对象。Intent 表示一个应用“执行某项操作的意向”。您可以将 intent 用于各种任务,但在本课中,您的 intent 用于启动另一个 Activity。

MainActivity.java 中,添加 EXTRA_MESSAGE 常量和 sendMessage() 代码,如此处所示:

public class MainActivity extends AppCompatActivity {
    public static final String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /** Called when the user taps the Send button */
    public void sendMessage(View view) {
        Intent intent = new Intent(this, DisplayMessageActivity.class);
        EditText editText = (EditText) findViewById(R.id.editText);
        String message = editText.getText().toString();
        intent.putExtra(EXTRA_MESSAGE, message);
        startActivity(intent);
    }
}

Android Studio 将再次遇到 Cannot resolve symbol 错误,因此,请按 Alt + Enter(在 Mac 上,则按 Option + Return)。您的导入应按如下所示方式结束:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

仍出现 DisplayMessageActivity 错误,但没关系;您将在下一部分中修复该错误。

下面是 sendMessage() 中的操作:

创建第二个 Activity

  1. Project 窗口中,右键点击 app 文件夹并选择 New > Activity > Empty Activity
  2. Configure Activity 窗口中,为 Activity Name 输入“DisplayMessageActivity”,然后点击 Finish(保留所有其他属性设置为默认值)。

Android Studio 会自动执行三项操作:

如果运行应用并在第一个 Activity 上点按按钮,将启动第二个 Activity,但它为空。这是因为第二个 Activity 使用模板提供的空布局。

添加文本视图

图 1. 位于布局顶部中心的文本视图

新 Activity 包括一个空白的布局文件,因此,现在您需要在消息将要显示的位置添加一个文本视图。

  1. 打开文件 app > res > layout > activity_display_message.xml
  2. 点击工具栏中的 Turn On Autoconnect
  3. Pallete 窗口中,将 TextView 拖动到布局中并将其放置在靠近布局顶部中心的位置,使其吸附到出现的垂直线上,然后释放。Autoconnect 将添加约束条件,在水平中心放置视图。
  4. 再从文本视图的顶部创建一个约束条件,将其限制在布局顶部,让它看起来如图 1 所示。

也可以在 Properties 窗口中展开 textAppearance 并更改属性(例如 textSizetextColor),对文本样式进行一些调整。

显示消息

现在,您将修改第二个 Activity,以显示第一个 Activity 传递的消息。

  1. DisplayMessageActivity.java 中,向 onCreate() 函数添加下列代码:
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_display_message);
        
        // Get the Intent that started this activity and extract the string
        Intent intent = getIntent();
        String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
    
        // Capture the layout's TextView and set the string as its text
        TextView textView = (TextView) findViewById(R.id.textView);
        textView.setText(message);
    }
  2. 按 Alt + Enter(在 Mac 上,则按 Option + Return)导入缺少的类。您的导入应按如下所示方式结束:
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.ViewGroup;
    import android.widget.TextView;
    

添加向上导航

您的应用中不是主入口的每个屏幕(所有不是主屏幕的屏幕)都应提供导航,以便用户在应用栏中点按“向上”按钮后可以返回应用层次结构中的逻辑父屏幕。

您需要做的全部工作是在 AndroidManifest.xml 文件中声明哪个 Activity 是逻辑父项。因此,请打开 app > Manifests > AndroidManifest.xml 处的文件,找到 DisplayMessageActivity<activity> 标记,然后将其替换为以下代码:

<activity android:name=".DisplayMessageActivity"
          android:parentActivityName=".MainActivity" >
    <!-- The meta-data tag is required if you support API level 15 and lower -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainActivity" />
</activity>

Android 系统现在会在应用栏中自动添加“向上”按钮。

运行应用

现在,点击工具栏中的 Apply Changes,再次运行应用 。当应用打开后,在文本字段中键入一条消息,点按 Send 以在第二个 Activity 中查看显示的消息。

图 2. 两个 Activity 的屏幕截图

就这么简单,您的第一个 Android 应用已成功诞生!

要继续学习 Android 应用开发的基础知识,请点击下面的链接来学习下一课。

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Follow Google Developers on WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)