Android开发权威指南(第二版)
上QQ阅读APP看书,第一时间看更新

5.5 从Activity返回数据

源代码目录:src/ch05/ActivityResult

在Android应用程序中,不仅要向其他窗口传递数据,而且要从窗口返回数据。虽然返回数据和传递数据类似,也可以采用前面介绍的4种方法,但一般建议采用Intent对象的方式来返回数据。使用这种方式返回数据,需要使用startActivityForResult方法来显示Activity,代码如下:

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

startActivityForResult(intent, 1);

其中startActivityForResult方法的第2个参数是一个int类型的请求码,可以是任意的整数,只是为了区分请求的来源,以便处理返回结果。现在建立一个MyActivity窗口类,在XML布局文件中添加一个EditText控件和一个按钮,代码如下:

源代码文件:src/ch05/ActivityResult/res/layout/myactivity.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

  android:orientation="vertical" android:layout_width="fill_parent"

  android:layout_height="fill_parent">

  <EditText android:id="@+id/edittext" android:layout_width="fill_parent"

    android:layout_height="wrap_content" />

  <Button android:id="@+id/button" android:layout_width="wrap_content"

    android:layout_height="wrap_content" android:onClick="onClick_Button" android:text="确定"/>

</LinearLayout>

注意

在<Button>标签中有一个android:onClick属性,通过该属性可以直接指定按钮单击事件的方法名,这样就可以在MyActivity类中不创建按钮对象而处理按钮单击事件了。如果在程序中只处理单击事件,而不直接引用相应的对象,可以采用这种指定单击事件的方法。

MyActivity类中按钮单击事件方法的代码如下:

源代码文件:src/ch05/ActivityResult/src/mobile/android/activity/result/MyActivity.java

// 该方法就是在android:onClick属性中指定的方法名,方法定义与Activity中的单击事件方法一样

// 必须被声明为public,而且必须有一个View类型的参数

public void onClick_Button(View view)

{

  // metEditText是从布局文件创建的EditText对象

  String value = metEditText.getText().toString();

  Intent intent = new Intent();

  intent.putExtra("value", value);

  // 通过Intent对象返回结果,setResult方法的第1个参数是一个响应码,与请求码类似

  setResult(2, intent);

  // 关闭当前的Activity

  finish();

}

在显示MyActivity的ResultActivity类中需要实现onActivityResult方法来处理返回的结果,代码如下:

源代码文件:src/ch05/ActivityResult/src/mobile/android/activity/result/ResultActivity.java

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data)

{

  super.onActivityResult(requestCode, resultCode, data);

  switch (requestCode)

  {

    case 1: // 请求码

      switch (resultCode)

      {

        case 2:  // 响应码

          setTitle(data.getStringExtra("value"));  // 将返回值作为标题来设置

          break;

        default:

          break;

      }

      break;

 

    default:

      break;

  }

}

运行程序,单击主界面的“显示MyActivity”按钮,会显示MyActivity窗口,在上面的文本输入框中输入一些文本,如图5-30所示。然后单击“确定”按钮返回ResultActivity窗口,就会在标题栏上显示刚才输入的文本,显示效果如图5-31所示。

 

▲图5-30 输入要返回的信息

 

▲图5-31 程序主界面(显示返回字符串)