startActivityForResult的用法

startActivityForResult方法是android中活动启动的一种方法,这个方法接收两个参数,第一个是Intent ,另一个是请求码,请求码只要是唯一值就可以。

这个方法可以在活动销毁之后,返回一个结果给上一个活动。

例如:活动A打开了活动B,那么在活动B销毁之后,可以返回一个结果给活动A。

这时候就要在活动A中,使用startActivityForResult方法打开活动B

        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent("com.example.activitytest.ACTTON_START");
                startActivityForResult(intent,1);//打开活动B
            }
        });

在活动B中用 setResult 方法设置好要返回的结果,setResult()接收两个参数,第一个是活动返回处理结果,一般只是用RESULT_OK和RESULT_CANCELED,另一个这是将带有数据的Intent传递回去。

        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent();
                intent.putExtra("data_return","测试一下");//要返回的结果
                setResult(RESULT_OK,intent);
                finish();//销毁活动B
            }
        });

在活动B被销毁后 ,会回调上一个活动(即活动A)的onActivityResult()方法(想要在活动A中获取传递的结果,就需要覆写该方法)。

   @Override   //                        请求码          处理结果          带返回数据的Intent                  
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        switch (requestCode){
            case 1 :
                if(resultCode == RESULT_OK){
                    String returnData = data.getStringExtra("data_return");
                    Log.d("MainActivity",returnData);
                }
                break;
                default:
        }
    }

这样在活动B被销毁后,就会回到活动A,获取到活动B返回的数据了。但在用户如果在活动B并没有点击定义的按钮button2,而是按下Back按键,这时候还需要覆写活动B的 onBackPressed()方法。

            @Override
            public void onBackPressed() {
                Intent intent = new Intent();
                intent.putExtra("data_return","测试一下");
                setResult(RESULT_OK,intent);
                finish();
            }
        });

 

posted @ 2019-08-29 18:30  年小猫  阅读(6287)  评论(0编辑  收藏  举报