startActivityForResult的用法,及requestCode、resultCode建议使用情况

有2个Activity,第一个跳转到第二个,第二个做完操作,再回到第一个。
布局就不写了,仅仅是几个textview点击来模拟
请求码设置为123,结果码设置为456
1、第一个activity:

public class MainActivity extends Activity {

    //去其他activity
    TextView to_other_act_tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        to_other_act_tv = (TextView) findViewById(R.id.to_other_act_tv);

        to_other_act_tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //startActivityForResult(Intent intent, int requestCode)
                startActivityForResult(new Intent(MainActivity.this, MainActivity_2.class), 123);

            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        Log.e("requestCode",requestCode+"");
        Log.e("resultCode",resultCode+"");
        Log.e("data",data+"");

        super.onActivityResult(requestCode, resultCode, data);
    }
}

2、第二个activity:
为了便于理解,先来个布局图
这里写图片描述
代码:

public class MainActivity_2 extends Activity {

    //finish按钮
    TextView finish_tv;

    //同意按钮
    TextView ok_tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_2);

        finish_tv = (TextView) findViewById(R.id.finish_tv);

        finish_tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        ok_tv = (TextView) findViewById(R.id.ok_tv);

        ok_tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent intent = new Intent(MainActivity_2.this, MainActivity.class);
                //setResult(int resultCode, Intent data)
                setResult(456, intent);
                finish();

            }
        });
    }
}

测试情况及结果:
1、点击finish按钮,直接关闭,这时,在第一个activity中,打印出结果

E/requestCode: 123
E/resultCode: 0
E/data: null

2、点击同意按钮,这时,在第一个activity中,打印出结果

E/requestCode: 123
E/resultCode: 456
E/data: Intent { cmp=com.chen.demo/.MainActivity }

3、去到第二个activity后,点击手机返回键退回来,打印结果:

E/requestCode: 123
E/resultCode: 0
E/data: null

从上面的数据可以看出,如果第二个直接关闭,或者运行完一些操作自己关闭了,如果不特殊指定,只会返回请求码,结果码一般是系统默认的。如果第二个界面,是阅读协议,需要有同意按钮等用户手动点击的,携带结果码,会更明确,以便和请求的区分开,避免点击同意,和点击关闭按钮,返回的都是请求码。
建议使用情况是:如果另外开启的activity,不需要用户有手动同意等情况,可以简单使用请求码。如果另外开启的activity,有多种情况,涉及到用户有区别的选择,可以设置结果码。以便回到原activity后区分出用户的选择

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值