响应 Send 按钮

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

在文件 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);
        }

        /** 添加按钮事件到 MainActivity 类 */
        public void sendMessage(View view) {
            // Do something in response to button
        }
    }

可能会看到一条错误,因为 Android Studio 无法找到用作函数参数的 View 类。

  1. 将光标放置在 View 声明上,然后按 Alt + Enter(在 Mac 上,则按 Option + Return),执行快速修复 出现一个菜单,选择 Import class

  2. 返回到 activity_main.xml 文件

  3. 指定按钮事件 调用此函数: 在布局编辑器中点击以选择按钮。 在 Attributes 窗口中,找到 onClick 属性并从下拉列表中选择 sendMessage [MainActivity]

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

    记下此函数中的详细信息,要让系统将此函数视为与 android:onClick 属性兼容 需要这些详细信息。

    具体来说,该函数必须声明以下内容 1. 公共访问 2. 空返回值 3. 以 View 作为唯一参数(它是之前点击的 View 对象)

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

  5. 构建一个 Intent Intent 是指在相互独立的组件(如两个 Activity)之间提供运行时绑定功能的对象。 Intent 表示一个应用 执行某项操作的意向

    可以将 intent 用于各种任务 但在本功能中,intent 用于启动另一个 Activity

  6. MainActivity.java 中,添加 EXTRA_MESSAGE 常量和 sendMessage() 代码

    ```java 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); } / 点击时 调用的函数 / public void sendMessage(View view) { // Do something in response to button

        //        匹配后面调用的 另一个 Activity 类(需要新建此类)
        Intent intent = new Intent(this, DisplayManagerActivity.class);
    
        //        查找 文本View(Activity)对象 转换为 可编辑对象
        EditText editText = (EditText) findViewById(R.id.editText);
    
        //        获取 组件 当前文本信息
        String message = editText.getText().toString();
    
        //         传递给另一个 Activity 中的 信息(以 key:value 形式传递)
        intent.putExtra(this.EXTRA_MESSAGE, message);
    
        // 点击个Activity 后 执行到该函数 进行 Activity 跳转
        startActivity(intent);
    }
    

    } ```

  7. Android Studio 将再次遇到 Cannot resolve symbol 错误 因此,请按 Alt + EnterMac 上,则按 Option + Return

    导入应按如下所示方式结束: java import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText;

    DisplayMessageActivity 仍有错误,将在下一部分中修复该错误 因未创建 该 Activity 类

    下面是 sendMessage() 中的操作: 1. Intent 构造函数采用两个参数 1. Context 是第一个参数(之所以使用 this 是因为 Activity 类是 Context 的子类) 2. 应用组件DisplayMessageActivityClass,系统应将 Intent(在本例中,为应用启动的 Activity)传递至该类 2. putExtra() 函数 将 EditText 的值添加到 intent 3. Intent 能够以名为 extra 的键值对形式携带数据类型 该键是一个公共常量 EXTRA_MESSAGE

因为下一个 Activity 将使用该键来显示文本值。 为 intent extra 定义键时最好使用应用的软件包名称作为前缀 这可以确保在应用与其他应用交互时这些键始终保持唯一

startActivity() 函数将启动 Intent 指定的 DisplayMessageActivity 实例,调用对应的Activity

现在,您需要创建该类。


创建第二个 Activity 事件 用来 显示返回的消息

  1. Project 窗口中,右键点击 app 文件夹并选择 New > Activity > Empty Activity

  2. Configure Activity 窗口中,

    1. Activity Name 输入 DisplayMessageActivity (与之前调用的相同)
    2. Finish(保留所有其他属性设置为默认值)。

    Android Studio 会自动执行三项操作: 1. 创建 DisplayMessageActivity.java 文件。 2. 创建对应的 activity_display_message.xml 布局文件。 3. 在 AndroidManifest.xml 中添加必需的 <activity> 元素。

    如果运行应用并在第一个 Activity 上点按按钮,将启动第二个 Activity ,但它为空。

    这是因为第二个 Activity 使用模板提供的空布局。

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

    1. 打开文件 app > res > layout > activity_display_message.xml

    2. 点击工具栏中的 Turn On Autoconnect (Autoconnect 启用,磁铁标记)。

    3. Palette 窗口中,点击 Text,然后将 TextView 拖动到布局中 > 将其放置在靠近布局顶部中心的位置,使其吸附到出现的垂直线上。

      Autoconnect 将添加左侧和右侧约束条件,在水平中心放置视图。

    4. 从文本视图的顶部创建一个约束条件,将其限制在布局顶部 也可以在 Attributes 窗口中展开 textAppearance 并更改属性 例 textSizetextColor ,对文本样式进行一些调整。

  4. 显示消息 修改第二个 Activity(显示结果Activity),以显示第一个 Activity(表单Activity) 传递的消息。

    1. DisplayMessageActivity.java 中,向 onCreate() 函数添加下列代码: ```java / 重载 TextView创建时 初始化函数 / @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 目的是绑定 对应组件 setContentView(R.layout.display_manager_activity);

          // 获取 Intent 传递对象
          Intent intent = getIntent();
      
          // 获取  MainActivity 传递字典中 的对应 key 的 value
          String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
      
          // 查找对应 组件 并 修改其显示 文本内容
          TextView textView = findViewById(R.id.textView);
          textView.setText(message);
      }
      

      `` 2. 按Alt + Enter(在 Mac 上,则按Option + Return`)导入缺少的类。

      导入应按如下所示方式结束: java import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView;

  5. 添加返回导航

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

    需要做的全部工作是在 AndroidManifest.xml 文件中声明哪个 Activity 是逻辑父项。

    因此,打开 app > manifests > AndroidManifest.xml 处的文件,找到 DisplayMessageActivity<activity> 标记

    然后将其替换为以下代码: ```xml

        <!-- 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 系统现在会在应用栏中自动添加“向上”按钮。

运行应用

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

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