startActivityForResult解析

举报
yechaoa 发表于 2022/05/31 00:59:39 2022/05/31
【摘要】 startActivity用于页面间的正常跳转。 startActivityForResult用于页面间的跳转并回传数据,比如商城类的App下单时会有选择地址,选择之后地址更新。 1.先用startActivityForResult方式启动一个页面 btn=(Button)findViewById(R.id.btn);...

startActivity用于页面间的正常跳转。

startActivityForResult用于页面间的跳转并回传数据,比如商城类的App下单时会有选择地址,选择之后地址更新。


1.先用startActivityForResult方式启动一个页面


  
  1. btn=(Button)findViewById(R.id.btn);
  2. btn.setOnClickListener(new View.OnClickListener() {
  3. @Override
  4. public void onClick(View v) {
  5. Intent intent = new Intent(MainActivity.this, SecondActivity.class);
  6. //参数1是intent,参数2是requestCode 自定义
  7. startActivityForResult(intent,1);
  8. }
  9. });

requestCode 是自定义的请求码,必须大于等于0才行,这点源码有声明



2.第二个页面,只放了一个按钮,主要是事件


  
  1. findViewById(R.id.second_btn).setOnClickListener(new View.OnClickListener() {
  2. @Override
  3. public void onClick(View v) {
  4. intent = new Intent();
  5. intent.putExtra("SecondActivity", "返回的数据");
  6. //参数1是resultCode,参数2是intent 自定义
  7. setResult(2, intent);
  8. finish();
  9. }
  10. });

setResult方法必须在页面finish之前执行



从源码注释中可以看出resultCode一般是正常或者取消,正常就是选择地址并返回,取消的情况比如,用户选择地址的时候突然又不想选了或者点错了,然后直接返回,这种情况可以默认不处理,处理的话就在这个页面监听一下返回键


  
  1. @Override
  2. public void onBackPressed() {
  3. setResult(3, intent);
  4. super.onBackPressed();
  5. }

注意,这个页面onClick事件中并没有startActivity或者startActivityForResult,而是直接finish掉,因为只有finish掉才会回调上个页面的onActivityResult方法


3.onActivityResult


  
  1. /**
  2. * @param requestCode 请求码
  3. * @param resultCode 结果码
  4. * @param data 参数
  5. */
  6. @Override
  7. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  8. super.onActivityResult(requestCode, resultCode, data);
  9. if (resultCode == 2) {//setResult中的标识码
  10. if (requestCode == 1) {//startActivityForResult中的标识码
  11. String mData = data.getStringExtra("SecondActivity");
  12. btn.setText(mData);
  13. }
  14. }else if(resultCode == 3){
  15. btn.setText("按返回键了");
  16. }
  17. }


完整代码:


MainActivity.java


  
  1. package com.yechaoa.startactforresult;
  2. import android.content.Intent;
  3. import android.support.v7.app.AppCompatActivity;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.widget.Button;
  7. public class MainActivity extends AppCompatActivity {
  8. private Button btn;
  9. @Override
  10. protected void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.activity_main);
  13. btn=(Button)findViewById(R.id.btn);
  14. btn.setOnClickListener(new View.OnClickListener() {
  15. @Override
  16. public void onClick(View v) {
  17. Intent intent = new Intent(MainActivity.this, SecondActivity.class);
  18. //参数1是intent,参数2是requestCode 自定义
  19. startActivityForResult(intent,1);
  20. }
  21. });
  22. }
  23. /**
  24. * @param requestCode 请求码
  25. * @param resultCode 结果码
  26. * @param data 参数
  27. */
  28. @Override
  29. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  30. super.onActivityResult(requestCode, resultCode, data);
  31. if (resultCode == 2) {//setResult中的标识码
  32. if (requestCode == 1) {//startActivityForResult中的标识码
  33. String mData = data.getStringExtra("SecondActivity");
  34. btn.setText(mData);
  35. }
  36. }else if(resultCode == 3){
  37. btn.setText("按返回键了");
  38. }
  39. }
  40. }


  
  1. package com.yechaoa.startactforresult;
  2. import android.content.Intent;
  3. import android.support.v7.app.AppCompatActivity;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. public class SecondActivity extends AppCompatActivity {
  7. private Intent intent;
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.activity_second);
  12. findViewById(R.id.second_btn).setOnClickListener(new View.OnClickListener() {
  13. @Override
  14. public void onClick(View v) {
  15. intent = new Intent();
  16. intent.putExtra("SecondActivity", "返回的数据");
  17. //参数1是resultCode,参数2是intent 自定义
  18. setResult(2, intent);
  19. finish();
  20. }
  21. });
  22. }
  23. @Override
  24. public void onBackPressed() {
  25. setResult(3, intent);
  26. super.onBackPressed();
  27. }
  28. }


文章来源: blog.csdn.net,作者:yechaoa,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/yechaoa/article/details/70596490

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。