【android】多个avtivity之间startActivityForResult小解

来源:互联网 发布:wwe2k16优化 编辑:程序博客网 时间:2024/05/21 18:33

* requestCode 请求码,即调用startActivityForResult() 传递过去的值
* resultCode 结果码,结果码用于标识返回数据来自哪个新Activity

一.我举2个例子可能会更明白:
1.在Activity中得到新打开Activity 关闭后返回的数据

  1. package com.ljq.activitys;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.util.Log;
  6. import android.view.View;
  7. import android.widget.Button;
  8. public class MainActivity extends Activity {
  9.     private final static String TAG="MainActivity";
  10.    
  11.     @Override
  12.     public void onCreate(Bundle savedInstanceState) {
  13.         super.onCreate(savedInstanceState);
  14.         setContentView(R.layout.main);
  15.        
  16.         Button btnOpen=(Button)this.findViewById(R.id.btnOpen);
  17.         btnOpen.setOnClickListener(new View.OnClickListener(){
  18.             public void onClick(View v) {
  19.                 //得到新打开Activity关闭后返回的数据
  20.                 //第二个参数为请求码,可以根据业务需求自己编号
  21.                 startActivityForResult(new Intent(MainActivity.this, OtherActivity.class), 1);
  22.             }
  23.         });
  24.     }
  25.    
  26.     /**
  27.      * 为了得到传回的数据,必须在前面的Activity中(指MainActivity类)重写onActivityResult方法
  28.      *
  29.      * requestCode 请求码,即调用startActivityForResult()传递过去的值
  30.      * resultCode 结果码,结果码用于标识返回数据来自哪个新Activity
  31.      */
  32.     @Override
  33.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  34.         String result = data.getExtras().getString("result");//得到新Activity 关闭后返回的数据
  35.         Log.i(TAG, result);
  36.     }
  37. }

2.新Activity关闭前需要向前面的Activity返回数据

  1. package com.ljq.activitys;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.widget.Button;
  7. public class OtherActivity extends Activity {
  8.     @Override
  9.     protected void onCreate(Bundle savedInstanceState) {
  10.         super.onCreate(savedInstanceState);
  11.         setContentView(R.layout.other);
  12.         Button btnClose=(Button)findViewById(R.id.btnClose);
  13.         btnClose.setOnClickListener(new View.OnClickListener(){
  14.             public void onClick(View v) {
  15.                 //数据是使用Intent返回
  16.                 Intent intent = new Intent();
  17.                 //把返回数据存入Intent
  18.                 intent.putExtra("result", "My name is linjiqin");
  19.                 //设置返回数据
  20.                 OtherActivity.this.setResult(RESULT_OK, intent);
  21.                 //关闭Activity
  22.                 OtherActivity.this.finish();
  23.             }
  24.         });
  25.        
  26.     }
  27. }//setResult()方法的第一个参数值可以根据业务需要自己定义

二.请求码的作用

使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,我们需要为startActivityForResult()方法传入一个请求码(第二个参数)。请求码的值是根据业务需要由自已设定,用于标识请求来源。例如:一个Activity有两个按钮,点击这两个按钮都会打开同一个Activity,不管是那个按钮打开新Activity,当这个新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。在onActivityResult()方法如果需要知道新Activity是由那个按钮打开的,并且要做出相应的业务处理,这时可以这样做:

  1.  @Override  public void onCreate(Bundle savedInstanceState) {
  2.         ....
  3.         button1.setOnClickListener(new View.OnClickListener(){
  4.             public void onClick(View v) {
  5.                 startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 1);
  6.            }
  7.         });
  8.         button2.setOnClickListener(new View.OnClickListener(){
  9.             public void onClick(View v) {
  10.                  startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 2);
  11.             }
  12.         });
  13.                          
  14.        @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  15.                switch(requestCode){
  16.                    case 1:
  17.                    //来自按钮1的请求,作相应业务处理
  18.                    case 2:
  19.                    //来自按钮2的请求,作相应业务处理
  20.                 }
  21.           }
  22. }

三.结果码的作用

在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务,当这些新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。为了知道返回的数据来自于哪个新Activity,在onActivityResult()方法中可以这样做(ResultActivity和NewActivity为要打开的新Activity):

  
  1. public class ResultActivity extends Activity {
  2.        .....
  3.        ResultActivity.this.setResult(1, intent);
  4.        ResultActivity.this.finish();
  5. }
  6. public class NewActivity extends Activity {
  7.        ......
  8.         NewActivity.this.setResult(2, intent);
  9.         NewActivity.this.finish();
  10. }
  11. public class MainActivity extends Activity { // 在该Activity会打开ResultActivity和NewActivity
  12.        @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  13.                switch(resultCode){
  14.                    case 1:
  15.                    // ResultActivity的返回数据
  16.                    case 2:
  17.                     // NewActivity的返回数据
  18.                 }
  19.           }
  20. }

可能有些不足,不过已经尽力了

0 0
原创粉丝点击