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

来源:互联网 发布:图片表格识别软件 编辑:程序博客网 时间:2024/05/24 15:40

问题描述:当主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 plaincopy
  1. getParent().startActivityForResult(intent, 0);  

2.新建一个回调接口OnTabActivityResultListener

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

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

[java] view plaincopy
  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 plaincopy
  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.     }