问题描述:当主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
- getParent().startActivityForResult(intent, 0);
2.新建一个回调接口OnTabActivityResultListener
- public interface OnTabAactivityResultListener{
- public void onTabActivityResult(int requestCode, int resultCode, Intent data);
- }
3.让Activity B实现上述接口,在Activity A的onActivitResult方法中做如下操作:
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- //取得当前活动的Activity
- Activity liveActivity = getLocalActivityManager().getCurrentActivity();
- //回调方法
- OnTabAactivityResultListener onTabAactivityResultListener = (OnTabAactivityResultListener)liveActivity;
- onTabAactivityResultListener.onTabActivityResult(requestCode, resultCode, data);
- }
4.在Activity B中实现接口OnTabActivityResultListener中的方法,取到返回值
- @Override
- public void onTabActivityResult(int requestCode, int resultCode, Intent data) {
- if (resultCode == RESULT_OK) {
- Bundle bundle = data.getExtras();
- String type = bundle.getString("type");
- }
- }