startActivityForResult的用法,及requestCode、resultCode建议使用情况
2016-10-14 11:48
471 查看
有2个Activity,第一个跳转到第二个,第二个做完操作,再回到第一个。
布局就不写了,仅仅是几个textview点击来模拟
请求码设置为123,结果码设置为456
1、第一个activity:
2、第二个activity:
为了便于理解,先来个布局图
代码:
测试情况及结果:
1、点击finish按钮,直接关闭,这时,在第一个activity中,打印出结果
2、点击同意按钮,这时,在第一个activity中,打印出结果
3、去到第二个activity后,点击手机返回键退回来,打印结果:
从上面的数据可以看出,如果第二个直接关闭,或者运行完一些操作自己关闭了,如果不特殊指定,只会返回请求码,结果码一般是系统默认的。如果第二个界面,是阅读协议,需要有同意按钮等用户手动点击的,携带结果码,会更明确,以便和请求的区分开,避免点击同意,和点击关闭按钮,返回的都是请求码。
建议使用情况是:如果另外开启的activity,不需要用户有手动同意等情况,可以简单使用请求码。如果另外开启的activity,有多种情况,涉及到用户有区别的选择,可以设置结果码。以便回到原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后区分出用户的选择
相关文章推荐
- 详细解释下多个Activity之间 startActivityForResult 时,requestCode 和 resultCode 的传递和用法
- android使用startActivityForResult时,requestCode和resultCode的作用
- (转)Android startActivityForResult(intent, requestCode)的用法
- 在Fragment中使用StartActivityForResult,RequestCode错乱的问题
- 在Fragment使用startActivityForResult()方法返回的resultCode不正确
- startActivityForResult的详细用法及详细使用说明
- android startActivityForResult(Intent intent, int requestCode)用法
- fragment各种情况下的生命周期、状态保存startActivityForResult是哪个类的方法,在什么情况下使用?
- Android startActivityForResult(intent, requestCode)的用法。
- startActivityForResult的使用和用法
- startActivityForResult(intent, requestCode)用法
- Android startActivityForResult(intent, requestCode)的用法。
- Android startActivityForResult(intent, requestCode)的用法。
- startActivityForResult 用法
- startActivityForResult()的用法
- startActivityForResult 用法
- startActivityForResult用法
- startActivityForResult使用方法
- android中使用startActivityForResult回传数据(转)
- startActivityForResult 用法