一、比较基础,之前学习中没有注意到,可以在清单文件AndroidMainfest.xml中的Activity标记,实现向上导航功能。
二、Developer guide中是基于java。如果是基于Kotlin,参考代码如下:
1、MainActivity.kt
class MainActivity : AppCompatActivity() {
companion object {
const val EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
/** Called when the user taps the Send button */
fun sendMessage(view: View) {
val intent = Intent(this, DisplayMessageActivity::class.java)
val editText = findViewById(R.id.editText) as EditText
val message = editText.text.toString()
intent.putExtra(EXTRA_MESSAGE, message)
startActivity(intent)
}
}
2、DisplayMessageActivity.kt
class DisplayMessageActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_display_message)
//获取MainActivity传递的intent所包含的message
var message : String = this.intent.getStringExtra(MainActivity.EXTRA_MESSAGE)
var textView : TextView = findViewById(R.id.textView)
textView.text = message
}
}
-----以下内容转载自Android Developer Guide----
https://developer.android.com/training/basics/firstapp/starting-activity
目录
启动另一个 Activity
响应 Send 按钮
构建一个 Intent
创建第二个 Activity
添加文本视图
显示消息
添加向上导航
运行应用
完成上一课的学习后,您已构建了一个应用,它可以显示一个 Activity(单一屏幕)并带有一个文本字段和一个按钮。在本课中,您将向 MainActivity
添加一些代码,这些代码可在用户点按 Send 时启动一个新的 Activity 来显示消息。
注:本课假设您使用 Android Studio 3.0。
按照以下步骤操作,在 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。)
现在,当点按按钮时,系统将调用 sendMessage()
函数。
记下此函数中的详细信息,要让系统将此函数视为与 android:onClick
属性兼容,需要这些详细信息。具体来说,函数必须声明以下内容:
View
作为唯一参数(它是之前点击的 View
对象)接下来,您需要填写此函数以读取文本字段的内容,并将该文本传递给另一个 Activity。
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()
中的操作:
Intent
构造函数采用两个参数:
Context
是第一个参数(之所以使用 this
是因为 Activity
类是 Context
的子类)Class
,系统应将 Intent
(在本例中,为应启动的 Activity)传递至该类。putExtra()
函数将 EditText
的值添加到 intent。Intent
能够以名为 extra 的键值对形式携带数据类型。您的键是一个公共常量 EXTRA_MESSAGE
,因为下一个 Activity 将使用该键来检索文本值。为 intent extra 定义键时最好使用应用的软件包名称作为前缀。这可以确保在您的应用与其他应用交互时这些键始终保持唯一。startActivity()
函数将启动 Intent
指定的 DisplayMessageActivity
实例。现在,您需要创建该类。Android Studio 会自动执行三项操作:
DisplayMessageActivity.java
文件。activity_display_message.xml
布局文件。AndroidManifest.xml
中添加必需的
元素。如果运行应用并在第一个 Activity 上点按按钮,将启动第二个 Activity,但它为空。这是因为第二个 Activity 使用模板提供的空布局。
图 1.位于布局顶部中心的文本视图
新 Activity 包括一个空白的布局文件,因此,现在您需要在消息将要显示的位置添加一个文本视图。
也可以在 Attributes 窗口中展开 textAppearance 并更改属性(例如 textSize 和 textColor),对文本样式进行一些调整。
现在,您将修改第二个 Activity,以显示第一个 Activity 传递的消息。
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 = findViewById(R.id.textView);
textView.setText(message);
}
您的应用中不是主入口的每个屏幕(所有不是主屏幕的屏幕)都应提供导航,以便用户在应用栏中点按“向上”按钮后可以返回应用层次结构中的逻辑父屏幕。
您需要做的全部工作是在 AndroidManifest.xml
文件中声明哪个 Activity 是逻辑父项。因此,请打开 app > manifests > AndroidManifest.xml 处的文件,找到 DisplayMessageActivity
的
标记,然后将其替换为以下代码:
Android 系统现在会在应用栏中自动添加“向上”按钮。
现在,点击工具栏中的 Apply Changes,再次运行应用 。当应用打开后,在文本字段中键入一条消息,点按 Send 以在第二个 Activity 中查看显示的消息。
图 2.两个 Activity 的屏幕截图
就这么简单,您的第一个 Android 应用已成功诞生!