startActivityForResult用法

来源:互联网 发布:ncut算法优劣 编辑:程序博客网 时间:2024/05/21 15:46

startActivityForResult用法详解

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

当前aActivity(A界面)代码
public static final int REQUESTCODE = 0;
model为在aActivity中需要传的值
@Overridepublic 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
@Overrideprotected 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
原创粉丝点击