美文网首页
12-17 startActivityForResult用法详解

12-17 startActivityForResult用法详解

作者: 知者半省者无 | 来源:发表于2016-12-17 09:59 被阅读190次

    startActivityForResult用法详解

    请求码的作用

    使用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的返回数据

    }

    }

    }

    转载:https://my.oschina.net/u/1410278/blog/224421

    相关文章

      网友评论

          本文标题:12-17 startActivityForResult用法详解

          本文链接:https://www.haomeiwen.com/subject/dzuomttx.html