【问题标题】:Android: Capturing the return of an activityAndroid:捕获活动的返回
【发布时间】:2010-10-01 18:12:56
【问题描述】:

我有一个关于启动新活动的问题。归结为这一点。 我在一个视图上有 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,我可以在其中响应被点击的假标签(图像)以退出相机活动。退出时,选项卡应更新,以便您返回。有什么建议吗?

谢谢,

【问题讨论】:

    标签: android android-intent android-activity exit


    【解决方案1】:

    我将重点回答如何解决您的工作区,使其按您的意愿运行。

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

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

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

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

    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; 
        } 
      } 
    } 
    

    【讨论】:

    • 为什么要打开 requestCode 然后检查 requestCode == RESULT_OK?编辑:没关系,我看到 requestCode/resultCode 的区别。
    • 我可以使用AsynkTask 作为第二个活动吗?
    • startActivityForResult 已弃用:link 和新方式 link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 2011-05-01
    相关资源
    最近更新 更多