1. 响应 Send 按钮
  2. 创建一个 Intent
  3. 启动第二个 Activity
  4. 创建第二个 Activity
  5. 接收 Intent
  6. 显示消息


  • 安装 SDK


在完成了 上一课后,你已经有了一个显示一个包含文件字段和按钮的 activity(一个单一屏幕) 的应用。在这节课中,你会在MainActivity

响应 Send 按钮


为了响应这个按钮的 on-click 事件,打开 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",是当用户点击这个按钮时系统调用的你的 activity 中的方法的名称。打开 MainActivity 类(在工程的src/

/** Called when the user clicks the Send button */
public void sendMessage(View view) {
    // Do something in response to button
}

你需要引入 View

import android.view.View;

技巧: 在 Eclipse 中,按 Ctrl + Shift + O 引入缺少的类(Mac 系统中 Cmd + Shift + O)。

为了让系统把该方法和 android:onClick

  • 是公有的
  • 没有返回值
  • 只有唯一一个

View

  • 参数(被点击的那个

View

下一步,你会填写这个方法,读取文本字段的内容并把它发送到另一个 activity。

创建一个 Intent


一个 Intent 是一个对象,它在不同的组件间(比如两个 activity)提供运行时绑定。IntentsendMessage() 方法中,创建一个Intent 来启动一个叫做DisplayMessageActivity

Intent intent = new Intent(this, DisplayMessageActivity.class);

这里使用的构造方法有两个参数:

  • 第一个参数是一个

Context

  • (用

this

  • 是因为

Activity

Context

  • 系统需要发送的

Intent

  • 的目标应用组件的

Class

  • (在这个例子中,是那个需要启动的 activity)

发送 intent 到其他应用


这节课中创建的 intent 是一个显示的 intent,因为这个 Intent 指定了接收这个 intent 的确切的应用组件。然而,intent 还可以是隐式的,这种情况下Intent 没有指定所需的组件,但是允许这个设备上安装的任何应用响应这个 intent,只要它满足Intent 的 action 参数的元数据规格。更多信息,参见与其他应用交互。

注意: 如果你正使用一个 IDE 比如 Eclipse,对 DisplayMessageActivity一个 intent 不仅允许你启动另一个 activity,它还能携带一些数据到目标 activity。在 sendMessage() 方法中,使用 findViewById() 取得EditText

Intent intent = new Intent(this, DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.edit_message);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);

注意:你现在需要引入 android.content.Intentandroid.widget.EditText 的声明。你一会儿会定义EXTRA_MESSAGE一个 Intent 可以携带一个称为extras 的数据集合,这个集合包含许多键值对格式的数据类型。putExtra()为了让下一个 activity 能查询附加的数据,你需要使用公共常量为你的 intent 的附加数据定义键。所以在 MainActivity 类的顶部添加 EXTRA_MESSAGE

public class MainActivity extends Activity {
    public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
    ...
}

在为 intent 附加数据定义键时,用你的应用的包名作为前缀通常是很好的实践。假如你的应用与其他应用交互,这将保证它们是唯一的。

启动第二个 Activity


为了启动一个 activity,传入你的 Intent 调用startActivity()。系统接收这个调用并启动这个Intent 指定的Activity加上这些新代码,Send 按钮触发的完整的 sendMessage()

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

为了让这些代码能够工作,现在你需要创建 DisplayMessageActivity

创建第二个 Activity




android启动两个fragment 安卓启动另一个应用_数据

图 1.



使用 Eclipse 创建一个新的 activity:

  1. 点击工具栏上的 New
  2. 在出现的窗口中,打开 Android 目录并选择 Android Activity。点击Next
  3. 选择 BlankActivity 并点击 Next
  4. 填写 activity 详细信息:
  • Project: MyFirstApp
  • Activity Name: DisplayMessageActivity
  • Layout Name: activity_display_message
  • Title: My Message
  • Hierarchial Parent: com.example.myfirstapp.MainActivity
  • Navigation Type: None

点击 Finish.

如果你使用一个不同的 IDE 或者命令行工具,在这个工程的 src/ 目录创建一个名称为 DisplayMessageActivity.java 的新文件,与原有的MainActivity.java打开 DisplayMessageActivity.java

  • 这个类已经包含了需要的

onCreate()

  • 还有

onCreateOptionsMenu()

  • 还有

onOptionsItemSelected()

  • 方法的实现,它处理操作栏的Up 行为。让它保持原样。

因为 ActionBar 应用程序接口只有在HONEYCOMB(API 等级 11)或更高版本才可用,你必须在getActionBar() 方法周围添加添加检查当前平台版本。 另外,你必须给onCreate() 方法添加@SuppressLint("NewApi") 标签来避免lint现在 DisplayMessageActivity

public class DisplayMessageActivity extends Activity {

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

        // Make sure we're running on Honeycomb or higher to use ActionBar APIs
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            // Show the Up button in the action bar.
            getActionBar().setDisplayHomeAsUpEnabled(true);
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            NavUtils.navigateUpFromSameTask(this);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

如果你使用其他 IDE 而不是 Eclipse,使用上面的代码更新你的 DisplayMessageActivityActivity 的所有子类必须实现onCreate() 方法。系统在创建 activity 的一个新的实例时会调用这个方法。在这个方法中,你必须使用setContentView() 注意:如果你使用其他 IDE 而不是 Eclipse,你的工程不包含 setContentView() 需要的activity_display_message

添加标题字符串

如果你使用 Eclipse,你可以跳到 下一小节,因为这个模板提供新的 activity 的标题字符串。

如果你使用其他 IDE 而不是 Eclipse,在 strings.xml

<resources>
    ...
    <string name="title_activity_display_message">My Message</string>
</resources>

在清单文件中添加它

所有的 activity 都必须使用 <activity> 元素在你的清单文件 AndroidManifest.xml

如果你使用 Eclipse 工具创建 activity,它会创建一个默认入口。如果你使用不同的 IDE,你需要自己添加清单入口。它看起来应该像这样:

<application ... >
    ...
    <activity
        android:name="com.example.myfirstapp.DisplayMessageActivity"
        android:label="@string/title_activity_display_message"
        android:parentActivityName="com.example.myfirstapp.MainActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myfirstapp.MainActivity" />
    </activity>
</application>

android:parentActivityName 属性声明了这个 activity 在应用的逻辑层次结构中的父 activity 的名称。系统使用这个值实现默认的导航行为,例如安卓 4.1 (API 登记 16) 或更高版本的Up 导航。你可以通过使用Support Library 并像这里展示的添加<meta-data>

注意:你的安卓的 SDK 应该已经包含最新的 Android Support Library。ADT Bundle 已经包含它了,但是如果你使用一个不同的 IDE,你需要在添加平台和包这一步骤中安装它。当在 Eclipse 中使用模板时,Support Library 已经自动添加到你的工程(你可以看到这个库的 JAR 文件在Android Dependencies 下列了出来)。如果你没有使用 Eclipse,你需要手动把这个库添加到你的工程—按照 设置 Support Library 指南

如果你使用 Eclipse 进行开发,现在你就可以运行应用了,并不需要太多的事情。点击 Send 按钮启动第二个 activity,它使用模板提供的默认的 "Hello world" 布局。过会你会更新这个 activity 显示一个自定义的文本视图,所以如果你使用一个不同的 IDE,不用担心应用还没有编译。

接收 Intent


每个 Activity,不管用户怎样导航到那里,都由一个Intent 触发。你可以调用getIntent() 取得启动你的 activity 的IntentDisplayMessageActivity 类的onCreate() 方法中,取得 intent 并提取发送给MainActivity

Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

显示消息


为了在屏幕上显示这个消息,创建一个 TextView 控件并使用setText() 设置文本。然后把它传给setContentView()现在 DisplayMessageActivity 的完整的onCreate()

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Get the message from the intent
    Intent intent = getIntent();
    String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

    // Create the text view
    TextView textView = new TextView(this);
    textView.setTextSize(40);
    textView.setText(message);

    // Set the text view as the activity layout
    setContentView(textView);
}

你现在可以运行这个应用了。当它打开后,在文本字段中输入消息,点击 Send,消息会在第二个 activity 显示。



android启动两个fragment 安卓启动另一个应用_数据_02

图 2.

好了,你已经建成了你的第一个安卓应用!