82

我有一个关于启动新活动的问题。归结为这一点。我在一个视图上有 3 个选项卡

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

要求是应用程序以纵向模式运行。

所有 3 个选项卡都按预期工作,但相机预览表面 (B) 除外。它旋转了 90 度。他们使其正确的唯一方法是将应用程序设置为横向,这会抛出我所有的标签,并且几乎不可行。

我的解决方案是:替换

我的相机活动与常规活动为空,但除外

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

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

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

我可以设置一个 onclicklistener,我可以在其中响应被点击的假标签(图像)以退出相机活动。退出时,选项卡应更新,以便您返回。有什么建议么?

谢谢,

4

1 回答 1

159

我将专注于回答如何解决您的工作区,以便它按照您的意愿行事。

要在另一个活动中捕获对一个活动执行的操作,需要三个步骤。

startActivityForResult通过使用而不是启动辅助活动(您的“相机活动”)作为子活动startActivity

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

在子活动(相机活动)中,您需要创建一个新的 Intent 并包含选项卡的索引,以在您使用附加包返回父应用程序时显示,而不是仅在用户单击不同的选项卡图像时关闭活动. 在调用关闭相机 ActivitysetResult之前将其传递回父调用。finish

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

最后一步是在调用 Activity 中,重写onActivityResult以监听来自摄像头 Activity 的回调。从返回的 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; 
    } 
  } 
} 
于 2009-01-16T08:20:47.997 回答