Tabhost中子Activity使用startActivityForResult后获取不到回调值问题的解决办法

本文介绍了解决Android应用中Tabhost或ActivityGroup环境下子Activity使用startActivityForResult后无法正常回调的问题。通过特定的方法调用及自定义回调接口实现数据的正确回传。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:当主Activity A是一个Tabhost布局,或者是一个ActivityGroup,在子Activity B中使用startActivityForResult来开启一个新的Activity C,新Activity C操作完后返回Activity B并传回一个值,这个值在Activity B的onActivityResult方法中无法取到。

问题原因:startActivityForResult后触发的回调方法并不在Activity B中,而是在Activity A中,Tabhost和ActivityGroup都是Activity容器,在子Activity中使用startActivityForResult后都只会触发其父Activity的回调方法。

解决方案:

1.在Activity B中使用如下方法开启Activity C

[java]  view plain copy
  1. getParent().startActivityForResult(intent, 0);  

2.新建一个回调接口OnTabActivityResultListener

[java]  view plain copy
  1. public interface OnTabAactivityResultListener{  
  2.     public void onTabActivityResult(int requestCode, int resultCode, Intent data);  
  3. }  

3.让Activity B实现上述接口,在Activity A的onActivitResult方法中做如下操作:

[java]  view plain copy
  1. @Override  
  2.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  3.         super.onActivityResult(requestCode, resultCode, data);  
  4.         //取得当前活动的Activity  
  5.         Activity liveActivity = getLocalActivityManager().getCurrentActivity();  
  6.         //回调方法  
  7.         OnTabAactivityResultListener onTabAactivityResultListener = (OnTabAactivityResultListener)liveActivity;  
  8.         onTabAactivityResultListener.onTabActivityResult(requestCode, resultCode, data);  
  9.           
  10.     }  

4.在Activity B中实现接口OnTabActivityResultListener中的方法,取到返回值

[java]  view plain copy
  1. @Override  
  2.     public void onTabActivityResult(int requestCode, int resultCode, Intent data) {  
  3.         if (resultCode == RESULT_OK) {  
  4.             Bundle bundle = data.getExtras();  
  5.             String type = bundle.getString("type");  
  6.         }  
  7.     }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值