2011-08-25 51 views
0

因此,这里是我的程序如何获得的ActivityGroup摆脱子活动导致

活动A(TabHost)的基本结构 - >选项卡1(的ActivityGroup) - > MainTab1Activity1

一切都很好, hunky dory如果我使用Tab 1调用MediaStore.ACTION_IMAGE_CAPTURE,但是如果我想要一个结果,并尝试(Tab 1.startIntentForResult而不是startChildActivity),它会尝试返回到Activity A,然后崩溃,因为它试图重新分配资源目前正在使用。

我的问题是我如何得到选项卡1来获得结果(我已经有一个选项卡1到MainTabACtivity1的传递方法,所以如果我可以得到结果在那里,我是金的任何帮助将不胜感激: )

Activty守则:

intent = new Intent().setClass(this, Tab1Group.class); 
intent.putExtra(main.USERNAME_RESULT, getIntent().getStringExtra(main.USERNAME_RESULT)); 
spec = tabHost.newTabSpec("tab1").setIndicator("Tab1Group", 
res.getDrawable(R.drawable.ic_tab_animals)).setContent(intent); 
tabHost.addTab(spec);` 

Tab1Group *活动组”

Intent faIntent = new Intent(this,MainTab1Activity1.class); 
startChildActivity("MainTab1Activity1",faIntent); 

MainTab1Activity1

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
intent.putExtra("output", "EXTRA_OUTPUT"); 
Calendar c = Calendar.getInstance(); 
SimpleDateFormat sdf = new SimpleDateFormat("yyyyy_MMM_dd_hh_mm_ss_aaa"); 
intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(
new File(FindAnimal.fileOutput+"/"+"Random"+sdf.format(c.getTime())+ 
"_"+currentImageValue+".jpg"))); 
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); 
Tab1GroupparentActivity = (Tab1Group)getParent(); 
parentActivity.startChildActivity("TakePic",intent); 
//parentActivity.startIntentForResult(intent,CAMERA_PICTURE); 

所以我们的目标是从相机获取图片结果,目前这种情况不会发生。如果我尝试最后注释掉的部分,它会尝试重新初始化活动A代码。

+0

你打电话给finish()吗?我很确定你需要这样做来从onActivityResult获得结果。您也可以尝试声明清单中的活动为SINGLE_TOP – Codeman

+0

是的确有问题存在,启动ChildActivity不会导致onActivityResult触发。 – Jon

+0

为什么需要成为儿童活动?为什么不能使用Serializable传递数据?看来会更容易:) – Codeman

回答

0

所以我最终做的是使用标准活动,我使用startActivity并摆脱了群体。然后我@Override OnWindowFocusChange来控制窗口是否恢复焦点。然后我使用一个临时静态数据持有者。

这里是我的控制器:

public class CameraResultController extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
     // Calendar c = Calendar.getInstance(); 
     // SimpleDateFormat sdf = new SimpleDateFormat("yyyyy_MMM_dd_hh_mm_ss_aaa"); 
     // intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(new File(FindAnimal.fileOutput+"/AnimalFound_"+sdf.format(c.getTime())+"_"+getIntent().getStringExtra(FindAnimal.NumAnimalsSubmit)+".jpg"))); 
     //intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); 
     startActivityForResult(intent, main.CAMERA_PICTURE); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     Log.d("CAMERA RESULT", "Got Result"); 
     if(requestCode==main.CAMERA_PICTURE) { 
      if(resultCode == Activity.RESULT_OK) { 
       Uri uriImage = data.getData(); 
       Bundle extra = data.getExtras(); 
       CameraPictureData.currentCameraURI = uriImage; 
      }else 
       CameraPictureData.currentCameraURI = null; 
     } 
     super.onActivityResult(requestCode, resultCode, data); 
     finish(); 
    } 
} 

public class CameraPictureData { 

    public static Uri currentCameraURI = null; 

} 

然后在OnWindowFocus访问CameraPictureData。

+0

这是行不通的,如果CameraResultController是从activitygroup启动的childactivity .....当我们调用startActivityForResult执行不会在onActivityResult .... – Jayesh