Android之startActivityForResult

作用:当aAty跳转之bAty时,需要bAty回传数据,使用startActivityForResult。

相关的函数:

aAty:--跳转至bAty(intent可以传递数据)

void android.app.Activity.startActivityForResult(Intent intent, int requestCode)

bAty:

void android.app.Activity.setResult(int resultCode, Intent data)

aAty:

void android.app.Activity.startActivityForResult(Intent intent, int requestCode)

代码:

aAty:

public class MainActivity extends Activity implements OnClickListener {
    private Button bt_jumpAnotherAty;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt_jumpAnotherAty = (Button) findViewById(R.id.bt_jumpAnotherAty);
        bt_jumpAnotherAty.setOnClickListener(this);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (resultCode) {
        case RESULT_OK:
            String result = data.getStringExtra("result");
            Log.d("h_bl", result);
            break;

        default:
            break;
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.bt_jumpAnotherAty:
            Intent intent = new Intent(MainActivity.this, AnotherActivity.class);
            startActivityForResult(intent, 0);
            break;

        default:
            break;
        }
    }

}

bAty:

public class AnotherActivity extends Activity implements OnClickListener {
    private Button bt_setResult;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_another);
        bt_setResult = (Button) findViewById(R.id.bt_setResult);
        bt_setResult.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.bt_setResult:
            // 数据是使用Intent返回
            Intent intent = new Intent();
            // 把返回数据存入Intent
            intent.putExtra("result", "My name is h_bolin");
            // 设置返回数据
            AnotherActivity.this.setResult(RESULT_OK, intent);
            // 结束该Aty,这点很重要。
            AnotherActivity.this.finish();
            break;

        default:
            break;
        }
    }

}

详解:bAty被销毁时 -- finish(),会返回数据。

PS.

1.一般不会在bAty的onCreate()方法写setResult()方法,需要在调用的时候,才会调用。

2.按Back键,Android会自动调用Aty的finish()方法。

3.可以重写onBackPressed()方法,对Back键的事件处理。

String result = data.getStringExtra("reslt");

4.取值时,要name要写对,不然会报以下错误:

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { (has extras) }} to activity {com.example.startactivityforresultdemo/com.example.startactivityforresultdemo.MainActivity}: java.lang.NullPointerException: println needs a message

startActivityForResult() 中requestCode 和 resultCode 的作用:

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

详见:

http://blog.csdn.net/donglynn/article/details/22693835

原文地址:https://www.cnblogs.com/H-BolinBlog/p/5267746.html