jkjkjkllladsl吧 关注:1贴子:80
  • 2回复贴,共1

startActivityForResult用法详解

只看楼主收藏回复

1L 百度


IP属地:北京1楼2015-07-20 11:07回复
    一、如果想在Activity中得到新打开Activity 关闭后返回的数据,需要使用系统提供的startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新的Activity 关闭后会向前面的Activity传回数据,为了得到传回的数据,必须在前面的Activity中重写onActivityResult(int requestCode, int resultCode, Intent data)方法。
    package com.ljq.activitys;
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    public class MainActivity extends Activity {
    private final static String TAG="MainActivity";
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Button btnOpen=(Button)this.findViewById(R.id.btnOpen);
    btnOpen.setOnClickListener(new View.OnClickListener(){
    public void onClick(View v) {
    //得到新打开Activity关闭后返回的数据
    //第二个参数为请求码,可以根据业务需求自己编号
    startActivityForResult(new Intent(MainActivity.this, OtherActivity.class), 1);
    }
    });
    }
    /**
    * 为了得到传回的数据,必须在前面的Activity中(指MainActivity类)重写onActivityResult方法
    *
    * requestCode 请求码,即调用startActivityForResult()传递过去的值
    * resultCode 结果码,结果码用于标识返回数据来自哪个新Activity
    */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    String result = data.getExtras().getString("result");//得到新Activity 关闭后返回的数据
    Log.i(TAG, result);
    }
    }


    IP属地:北京2楼2015-07-20 11:07
    回复
      当新Activity关闭后,新Activity返回的数据通过Intent进行传递,android平台会调用前面Activity 的onActivityResult()方法,把存放了返回数据的Intent作为第三个输入参数传入,在onActivityResult()方法中使用第三个输入参数可以取出新Activity返回的数据。
      二、使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新Activity关闭前需要向前面的Activity返回数据需要使用系统提供的setResult(int resultCode, Intent data)方法实现:
      package com.ljq.activitys;
      import android.app.Activity;
      import android.content.Intent;
      import android.os.Bundle;
      import android.view.View;
      import android.widget.Button;
      public class OtherActivity extends Activity {
      @Override
      protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.other);
      Button btnClose=(Button)findViewById(R.id.btnClose);
      btnClose.setOnClickListener(new View.OnClickListener(){
      public void onClick(View v) {
      //数据是使用Intent返回
      Intent intent = new Intent();
      //把返回数据存入Intent
      intent.putExtra("result", "My name is linjiqin");
      //设置返回数据
      OtherActivity.this.setResult(RESULT_OK, intent);
      //关闭Activity
      OtherActivity.this.finish();
      }
      });
      }
      }
      setResult()方法的第一个参数值可以根据业务需要自己定义,上面代码中使用到的RESULT_OK是系统Activity类定义的一个常量,值为-1,代码片断如下:
      public class android.app.Activity extends ......{
      public static final int RESULT_CANCELED = 0;
      public static final int RESULT_OK = -1;
      public static final int RESULT_FIRST_USER = 1;
      }


      IP属地:北京3楼2015-07-20 11:08
      回复