通信组件——Intent简单使用(二)(获取Activity返回值)

    上次示例中,通过使用startActivity(Intent)方法启动Activity后,启动后的两个Activity之间相互独立,没有任何的关联,在很多情况下,后启动的Activity是为了让用户对特定信息进行选择,在关闭这个Activity后,用户的选择信息需要返回给未关闭的那个Activity
    按照Activity启动的先后顺序,先启动的称为父Activity,后启动的称为子Activity
如果需要将子Activity的部分信息返回给父Activity,则可以使用Sub-Activity的方式去启动子Activity


接着让我们来学习一下如何获取子Activity的返回值,一般可以分为以下三个步骤:
一、以Sub-Activity的方式启动子Activity
二、设置子Activity的返回值
三、在父Activity中获取返回值


一、以Sub-Activity的方式启动子Activity需要调用函数startActivityForResult(Intent, requestCode)  ;

  (注:函数参数Intent用于决定启动哪个Activity,参数requestCode是唯一的标识子Activity的请求码)
显示启动子Activity:

int SUBACTIVITY1 = 1;
Intent intent = new Intent(this, SubActivity1.class);
startActivityForResult(intent, SUBACTIVITY1);

隐式启动子Activity:

int SUBACTIVITY2 = 2;
Uri uri = Uri.parse("content://contacts/people");
Intent intent = new Intent(Intent.ACTION_PICK, uri);
startActivityForResult(intent, SUBACTIVITY2);


二、设置子Activity的返回值

调用setResult()函数将所需的数据返回给父Activity, setResult()函数有两个参数:结果码和返回值

(注:结果码表明了子Activity的返回状态,通常为Activity.RESULT_OK或者Activity.RESULT_CANCELED,结果码均为整数类型;返回值封装在Intent中,子Activity通过Intent将需要返回的数据传递给父Activity。数据主要是Uri形式,可以附加一些额外信息,这些额外信息用Extra的集合表示)

代码如下:

Uri data = Uri.parse("tel:" + tel_number);
Intent result = new Intent(null, data);
result.putExtra("address", " ");
setResult(RESULT_OK, result);
finish();

三、在父Activity中获取返回值

当子Activity关闭时,启动它的父Activity的onActivityResult()函数将被调用;如果需要在父Activity中处理子Activity的返回值,则重载此函数即可

函数用法:public void onActivityResult(int requestCode, int resultCode, Intent data);
注:  参数requestCode,用来表示是哪一个子Activity的返回值
            参数resultCode用于表示子Activity的返回状态
            参数data是子Activity的返回数据,返回数据类型是Intent。)



好啦,接下来给出代码:


通信组件——Intent简单使用(二)(获取Activity返回值)

MainActivity.java:

public class MainActivity extends Activity {
 private static final int SUBACTIVITY1 = 1;
 private static final int SUBACTIVITY2 = 2;
 TextView textView;
 @Override
 public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         textView = (TextView)findViewById(R.id.textShow);
         final Button btn1 = (Button)findViewById(R.id.btn1);
         final Button btn2 = (Button)findViewById(R.id.btn2);
       
          btn1.setOnClickListener(new OnClickListener(){
           public void onClick(View view){
            Intent intent = new Intent(MainActivity.this, SubActivity1.class);
            startActivityForResult(intent, SUBACTIVITY1);
           }
          });
          btn2.setOnClickListener(new OnClickListener(){
                   public void onClick(View view){
                    Intent intent = new Intent(MainActivity.this, SubActivity2.class);
                    startActivityForResult(intent, SUBACTIVITY2);
                   }
               });
}
    @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       super.onActivityResult(requestCode, resultCode, data);
  
       switch(requestCode){
       case SUBACTIVITY1:
        if (resultCode == RESULT_OK){
                Uri uriData = data.getData();
                textView.setText(uriData.toString());
                          }
                 break;
      case SUBACTIVITY2:
                break;
               }
                 }
}

SubActivity1.java:

public class SubActivity1 extends Activity {
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.subactivity1);
  final EditText editText = (EditText)findViewById(R.id.edit);
  Button btnac = (Button)findViewById(R.id.btn_ac);
  Button btnre = (Button)findViewById(R.id.btn_re);
 
  btnac.setOnClickListener(new OnClickListener(){
   public void onClick(View view){
    String uriString = editText.getText().toString();
    Uri data = Uri.parse(uriString);
    Intent result = new Intent(null, data);
    setResult(RESULT_OK, result);
    finish();
   }
  });
   
   btnre.setOnClickListener(new OnClickListener(){
    public void onClick(View view){
     setResult(RESULT_CANCELED, null);
     finish();
    }
    });
        }
}


SubActivity2.java:

public class SubActivity2 extends Activity {
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.subactivity2);
       
  Button btnReturn = (Button)findViewById(R.id.btn_return);
  btnReturn.setOnClickListener(new OnClickListener(){
   public void onClick(View view){
    setResult(RESULT_CANCELED, null);
    finish();
   }
  });
 }
}


activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="启动Activity1" />
    <Button
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="启动Activity2" />
    <TextView
        android:id="@+id/textShow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />
</LinearLayout>



subactivity1.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="SubActivity1" />
    <EditText
        android:id="@+id/edit"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"/>
    <Button
        android:id="@+id/btn_ac"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="接受" />
    <Button
        android:id="@+id/btn_re"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="撤销" />
</LinearLayout>



subactivity2.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <Button
        android:id="@+id/btn_return"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="返回" />
</LinearLayout>

好啦,大功告成,一个简单的小程序写好了;对了,不要忘记注册:

通信组件——Intent简单使用(二)(获取Activity返回值)



效果:

通信组件——Intent简单使用(二)(获取Activity返回值)

通信组件——Intent简单使用(二)(获取Activity返回值)

通信组件——Intent简单使用(二)(获取Activity返回值)


希望可以帮助大家