2009-01-16 71 views
78

我有关于启动新活动的问题。归结到这一点。 我有一个视图3个标签Android:捕获活动的返回

A) contains gMap activity 
B) camera activity 
C) some random text fields. 

要求是,该应用程序在肖像模式下运行。

如预期的那样,所有3个选项卡都可以工作,但相机预览表面(B)的例外。它旋转90度。他们唯一的方法就是将应用程序设置为风景,这会引发我的所有选项卡,并且几乎不可行。

我的解决办法是这样的:替代

我的相机活动与经常性活动是空的W /的

Intent i = new Intent(this,CameraActivity.class); 
    startActivity(i); 

例外这将启动我的CameraActivity。这工作正常。我必须做一个线性布局,并包含3个看起来像真实标签的图像,所以我可以尝试模仿标签的操作,同时将屏幕旋转到横向并将视觉保持为纵向。 用户可以单击其中一个图像(按钮)来显示下一个选项卡。这是我的问题。它应该退出我的“相机活动”,返回到标签中的“空白活动”,应该将其解释为从我的图像中单击desiered选项卡。

最重要的是,当它返回时,它将返回到选项卡下的空白(黑色)页面(因为它是'空')。如何将返回事件捕获回调用该活动的页面,然后查看它们执行的操作?

我可以设置一个onclicklistener,在那里我可以响应被点击的伪造标签(图片)以退出相机活动。退出时,选项卡应该更新,以便返回。有什么建议么?

感谢,

回答

155

我会专注于回答如何解决您的workround,这样它的行为,只要你想。

要捕获在另一个Activity中执行的操作需要三个步骤。

使用startActivityForResult而不是startActivity作为子活动启动次要活动(您的'相机活动')。

Intent i = new Intent(this,CameraActivity.class);  
startActivityForResult(i, STATIC_INTEGER_VALUE); 

内子活动(相机活动),而不是当用户点击不同的标签图像刚刚闭幕的活动,你需要创建一个新的意图,包括标签的索引当您返回到显示父应用程序使用额外套件。在致电finish关闭相机活动之前,将其传回给父母电话setResult

resultIntent = new Intent(null); 
resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, tabIndexValue); 
setResult(Activity.RESULT_OK, resultIntent); 
finish(); 

的最后一步是在呼叫活动,重写onActivityResult以监听来自相机活动回调。从返回的Intent中获取额外的内容以确定您应该显示的选项卡的索引。

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) {  
    super.onActivityResult(requestCode, resultCode, data); 
    switch(requestCode) { 
    case (STATIC_INTEGER_VALUE) : { 
     if (resultCode == Activity.RESULT_OK) { 
     int tabIndex = data.getIntExtra(PUBLIC_STATIC_STRING_IDENTIFIER); 
     // TODO Switch tabs using the index. 
     } 
     break; 
    } 
    } 
} 
+3

为什么你打开requestCode然后检查requestCode == RESULT_OK?编辑:没关系,我看到requestCode/resultCode的区别。 – varikin 2010-12-31 17:32:36