前天遇到了一个麻烦,还真是麻烦啊。

我使用startActivityForResult()&onActivityResult()。由Activity-A 跳转到Activity-B 页面,然后在Activity-B页面编辑完个人资料之后携带个人数据交回到Activity-A页面。事实上非常easy的问题,可是 让我没有预料到的是居然出现了岔子。以下展示我的效果图及正确的代码:

这些代码是作为编辑昵称:<Activity-B页面>

public class EditToNickNameAty extends Activity implements OnClickListener{private EditText edtNickName;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.aty_thedata_edit_nickname);findViewById(R.id.btn_back).setOnClickListener(this);edtNickName=(EditText) findViewById(R.id.edt_nickName);findViewById(R.id.img_nickNameCancell).setOnClickListener(this);findViewById(R.id.btnOk).setOnClickListener(this);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.img_nickNameCancell://昵称清空设置键edtNickName.setText("");break;case R.id.btnOk:nickNameHandleViews();break;case R.id.btn_back:finish();overridePendingTransition(R.anim.loadout_from_enter,R.anim.loadout_from_exit);break;default:break;}}private void nickNameHandleViews() {// TODO Auto-generated method stubString result = edtNickName.getText().toString();Intent resultFor=new Intent(this, PersonalDataEditAty.class);if(TextUtils.isEmpty(result)){result = "";}Bundle data = new Bundle();data.putString("result", result);resultFor.putExtras(data);//设置结果并进行传输this.setResult(PersonalDataEditAty.ATY_CODE_NICKENAME, resultFor);this.finish();}
}

Activity-B页面:

跳转button作跳转监听:

case R.id.lay_item_nikeName:Intent nickName = new Intent(this, EditToNickNameAty.class);startActivityForResult(nickName, 10);//ATY_CODE_NICKENAMEoverridePendingTransition(R.anim.loadin_from_enter,R.anim.loadin_from_exit);break;

接收从Activity-A携带过来的数据:

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stub
if(resultCode==ATY_CODE_NICKENAME){//昵称Log.d("json", "//昵称"+data.getExtras().getString("result"));if(OperationTool.isNetWorkConnected(this)){resetNickName = data.getExtras().getString("result");get(mHandler, UrlFinalcons.url+"member_edit?

"+"token="+token+"&nick="+resetNickName, NormalFinalcons.NICK_NAME); } }

当中一些细节问题这里提一下:

在onActivityResult()。方法參数中參数--int resultCode  --int requestCode  --Intent data

当中,

resultCode:是Activity-A页面 startActivityForResult(intent,resultCode); 中与该跳转方法的第二个參数匹对且相等;

requestCode:是Activity-B页面 setResult(requestCode, intent);中与该跳转方法的第一个參数匹配且相等;

data:是Activity-B页面 setResult(requestCode, intent);中与该跳转方法的第二个參数匹配且相等。

注意:startActivityForResult(intent,resultCode);中的resultCode最好不要与setResult(requestCode, intent);中的requeCode相等。resultCode>0

最后解决实际问题:为什么我的全部的配置都做了。就是不能由B------->A的正常跳转呢?

原因一:与 Activity 的载入模式(launchMode)有关;Activity的载入模式,在这样的的跳转的方式下要使用标准模式(我就是使用了 android:launchMode="singleTop"模式,结果不能正常跳转)原因二:调用startActivityForResult的參数问题。即原先调用时这样:startActivityForResult(intent, 0);是第二个參数的问题。该參数必须大于0才干在返回值,并激活onActivityResult方法。

原因三:在TabHost的子Activity中startActivityForResult调用其它Activity时候遭遇到onActivityResult方法不响应的问题;

解决方式:

1.通过父Activity启动其它Activity;2.实现父Activity的onActivityResult方法,将该处接收到的请求转发给当前活动的子Activity;3.自己定义一个转发接口用来实现第2步中的转发功能;4.子Activity中实现第3步接口中的方法用来接收返回信息;

代码例如以下:

1.通过父Activity启动其它Activity

 getParent().startActivityForResult(new Intent(...), REQUEST_CODE);

2.实现父Activity的onActivityResult方法

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// 获取当前活动的Activity实例Activity subActivity = getLocalActivityManager().getCurrentActivity();//推断是否实现返回值接口if (subActivity instanceof OnTabActivityResultListe<wbr>ner) {//获取返回值接口实例OnTabActivityResultListe<wbr>ner listener = (OnTabActivityResultListe<wbr>ner) subActivity;//转发请求到子Activitylistener.onTabActivityResult(requestCode, resultCode, data);}super.onActivityResult(requestCode, resultCode, data);}

3.自己定义接口

public interface OnTabActivityResultListener {public void onTabActivityResult(int requestCode, int resultCode, Intent data);}

4.子Activity须要实现onTabActivityResult方法

@Overridepublic void onTabActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {//实现该处逻辑...}}
/** <span>凡是Activity本身含有上次父类的情况都不能直接使用startActivityForResult。而要通过getParent()。通过父类调用此方法。</span>     */

版权声明:本文博客原创文章,博客,未经同意,不得转载。

转载于:https://www.cnblogs.com/hrhguanli/p/4679738.html

BUG系列:转让startActivityForResult()amp;onActivityResult()没有反应相关推荐

  1. 调用startActivityForResult,onActivityResult无响应的问题

    2019独角兽企业重金招聘Python工程师标准>>> 三种情况: 一.执行startActivityForResult,没等到被调用的 Activity 返回,onActivity ...

  2. 【Android】startActivityForResult()与onActivityResult()与setResult()参数分析

    一.使用场景 在一个主界面(主Activity)通过意图跳转至多个不同子Activity上去,当子模块的代码执行完毕后再次返回主页面,将子activity中得到的数据显示在主界面/完成的数据交给主Ac ...

  3. [Android学习笔记]startActivityForResult和onActivityResult的使用

    发开过程中,免不了多个页面之间相互交互通信. Android中使用startActivityForResult方法和onActivityResult配合完成任务 startActivityForRes ...

  4. [原创]Redis BUG系列(I)——SDS字符串的sdssplitlen函数实现顺序BUG,浪费了计算与内存资源

    这里写自定义目录标题 简要 BUG介绍 源码与说明 BUG内容 修改方法 BUG验证 BUG影响 版本范围 哪些时候调用sdssplitlen这个函数? 我在GIT上提交的pull request 简 ...

  5. 【Unity3D】Animator动画播放时卡死在第一帧BUG系列

    常见因素: 1.Animator在Update或其他每帧执行的协程或方法里疯狂被代码调用. 2.Animator动画播放事件会再次调用Animator动画播放. 3.Animator状态机切换问题,A ...

  6. 【奇奇怪怪的bug系列】微信小程序

    今天修改代码的时候,发现了一件让我很恐慌的事情,在app.json中修改页面路径顺序不起作用了: 这样我根本就看不到页面的效果啊??? 在折腾了半天后,才发现是一个比较乌龙的事情:昨天修改完首页后顺手 ...

  7. bug系列(二)release版本DLL报错,debug版本正常

    一.链接错误 编译成release版本时,提示 Linking... nafxcw.lib(thrdcore.obj) : error LNK2001: unresolved external sym ...

  8. 《小黑解bug系列》|基本数据类型数组调试出现Internal error. See logs for more details.追踪不了数组的值

    小黑这天彻底郁闷了,这到底是个什么错误,为什么基本数据类型的数组调试不了,编译和运行明明都没问题,明明别人电脑上也没有问题,是不是自己被idea针对了,真是百思不得其解呀~ 情况如上图所示,所有的基本 ...

  9. ❤️ file format not recognized; treating as linker script 【莫名奇妙的bug系列】❤️

    目录 一.问题描述 二.出错原因 三.解决方案 一.问题描述 linux环境下,C++编译出现问题,报错: XXX.so:file format not recognized; treating as ...

最新文章

  1. TS流解析之PAT表格解析
  2. 小程序云函数获取用户昵称_小程序云开发云函数进阶
  3. 使用格式工厂把视频进行旋转
  4. 23种设计模式----------代理模式(一)
  5. [PAT乙级]1002 写出这个数
  6. python 组合数_python – 查找两个数组元素的最大有效组合数
  7. css中英文混排 标点,浅析css中英文混排时行高不一样的原因及其解决方法
  8. 【Uvalive 2531】 The K-League (最大流-类似公平分配问题)
  9. 【IDEA】报错:Warning:java: 源值1.5已过时, 将在未来所有发行版中删除
  10. python 抓取 快代理-国内普通代理 IP
  11. linux两种库:动态库和静态库(共享库)说明
  12. Windows数字签名 数字签名(代码签名)流程
  13. item_search_img - 按图搜索1688商品(拍立淘)
  14. 当你第一次发送ping请求包,ARP缓存表为空时会发生什么?(详细解析全过程)
  15. 移动硬盘文件丢失要如何找回呢?
  16. ubuntu激活pycharm
  17. Scratch之小猫酷跑我设计
  18. 学 Python 和学 Java ,哪个好找工作?
  19. 少儿编程Scratch学习教程4--基本操作(一)特效例子
  20. 「应用笔记」激光二维码导航混合制图

热门文章

  1. Shiro集成SpringBoot时出现 not eligible for auto-proxying
  2. 问:一行Python代码到底能干多少事情?(三)
  3. 操作系统(二)操作系统的四个特征
  4. Vitalik Buterin:Casper 权益证明与分片技术最新进展
  5. 微博json文件_python 爬取微博评论 !
  6. JZOJ 5678. 【GDOI2018Day2模拟4.21】果树
  7. 计算机专业英语第五版卢川英pdf,《德意志意识形态》中的“现实的个人”及其自由全面发展.pdf...
  8. mysql免安装版net不是_MYSQL 免安装版的环境配置
  9. Cortex-A 处理器运行模型
  10. mongodb 安装包_MongoDB快速入门,掌握这些刚刚好!