Android:捕获活动的返回


82

我对启动新活动有疑问。归结为这一点。我在视图上有3个标签

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

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

除Camera Preview Surface(B)以外,所有3个选项卡均可按预期工作。将其旋转90度。他们唯一能使它正确的方法是将应用程序设置为横向模式,从而使我的所有选项卡乱七八糟,几乎是行不通的。

我的解决方案是:替换

我的相机活动中有一个常规活动为空,但没有

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

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

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

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

谢谢,

Answers:


159

我将重点回答如何解决您的工作环境,使其表现出所需的效果。

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

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

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

在子活动(相机活动)中,您需要创建一个新的Intent并包括选项卡的索引以在您使用Extras包返回父应用程序时显示,而不仅仅是在用户单击其他选项卡图像时关闭该活动。 。要将其传递回上级调用,setResult然后再调用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; 
    } 
  } 
} 

3
为什么要打开requestCode然后检查requestCode == RESULT_OK?编辑:没关系,我看到requestCode / resultCode的区别。
varikin

1
我可以用这样做AsynkTask第二个活动
弗朗西斯科·科拉莱斯·莫拉莱斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.