startActivityForResult用法

startActivityForResult用法详解

当前Activity(A界面)要打开另一个Activity(B界面)并传递值,然后关闭(B界面)返回到当前Activity(A界面)并传值,这样的需求需要用到是startActivityForResult打开方式

当前aActivity(A界面)代码

public static final int REQUESTCODE = 0;
model为在aActivity中需要传的值

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.activity_form_save:
            editAction();
            break;  
    }
}
此为打开bActivity代码
private void editAction() {  
	Intent intent = new Intent(this, bActivity.class);    
	intent.putExtra("model", model);    
	startActivityForResult(intent, REQUESTCODE);}
 
PS:当前aActivity必须要重写onActivityResult方法来对将来的bActivity关闭并返回值做出回应。

requestCode 请求码,即调用startActivityForResult()传递过去的值
resultCode 结果码,结果码用于标识返回数据来自哪个新Activity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        switch (requestCode) {
            case REQUESTCODE:
                model = data.getSerializableExtra("model");
                initData();
                adapter.notifyDataSetChanged();比如这类操作,这是我需要的,因情况而定
                break;
        }
    }
}

bActivity(B界面)代码

modelb为bActivity中的值

 
Button btnClose=(Button)findViewById(R.id.btnClose);
btnClose.setOnClickListener(new View.OnClickListener(){
    public void onClick(View v) {
        //数据是使用Intent返回
        Intent data = new Intent();
        //把返回数据存入Intent
        data.putExtra("result", modelb);
        //设置返回数据
        bActivity.this.setResult(RESULT_OK, data);
        //关闭Activity
        bActivity.this.finish();
    }
});

    请求码的作用

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

             }

        });
        button2.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
        startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 2);

              }

        });


@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch(requestCode){
        case 1:
        //来自按钮1的请求,作相应业务处理
        case 2:
        //来自按钮2的请求,作相应业务处理
           }
       }
  }




        结果码的作用

        在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务,当这些新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。为了知道返回的数据来自于哪个新Activity,在onActivityResult()方法中可以这样做(ResultActivity和NewActivity为要打开的新Activity):
public class ResultActivity extends Activity {
    .....
    ResultActivity.this.setResult(1, intent);
    ResultActivity.this.finish();
}
public class NewActivity extends Activity {
    ......
    NewActivity.this.setResult(2, intent);
    NewActivity.this.finish();
}
public class MainActivity extends Activity { // 在该Activity会打开ResultActivity和NewActivity
    @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch(resultCode){
            case 1:
                // ResultActivity的返回数据
            case 2:
                // NewActivity的返回数据
        }
    }
} 



以上内容希望对大家有所帮助

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值