活动堆栈android - 从启动的URI返回pdf不会返回正确的活动

时间:2013-02-06 10:17:00

标签: android android-activity

我想出去解决为什么我的一个活动无法正常使用stack.back按钮。

活动Brain在用户按下Main活动中的图像按钮时启动,这样可以正常工作,后退按钮的行为符合Brain的预期(即按预期返回主活动)。

在大脑中我想基于用户按下的图像按钮启动PDF,我通过URI使用下面的代码执行此操作,PDF加载正常,但在acrobat中按下后,应用程序返回主活动,不是大脑不是我想要(或预期)的行为。我已经阅读了应用程序开发人员指南并尝试了Intent Flag_activity的所有选项(我认为),但无法修复后退按钮的行为。我试过链接到不同的PDF(如果它是acrobat中的随机内容),但应用程序的行为相同,总是回到主要而不是我想要的大脑。

我正在使用Imagebuttons来允许用户选择pdf,下面的代码调用URI / intent来显示pdf。我已经离开了2个我尝试过的Intent.Flags并没有运气放大,我原本期望Intent.Flag_Activity_Clear_Top工作,但我一定错过了什么。

使用以下onClick代码

从main调用大脑活动
 if (v==bbrain) {
                    Intent startbrain = new Intent(Main.this, Brain.class); //this is the Brain chooser
                    startActivity(startbrain);
                overridePendingTransition(R.anim.pull_from_left_enter, R.anim.pull_out_to_left_exit);
                    }

然后大脑活动java看起来像这样:

public void onClick(View v) {

            if (v==bhome); {
            Intent starthome = new Intent(Brain.this, Main.class); //this is main screen
            startActivity(starthome);
            overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
            }

            if (v==babouttest){
                Intent start1gp = new Intent(Brain.this, AboutScreen.class); //this is 1gp lesson
                startActivity(start1gp);
                overridePendingTransition(R.anim.pull_from_left_enter, R.anim.pull_out_to_left_exit);
            }

            if (v==imagepetro) {
                File file = new File("/sdcard/documents/1.pdf");
                  if (file.exists()) {
                        Uri path = Uri.fromFile(file);
                        Intent intent = new Intent(Intent.ACTION_VIEW);
                        intent.setDataAndType(path, "application/pdf");
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                        try {
                            startActivity(intent);
                            overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
                        } 
                        catch (ActivityNotFoundException e) {

                        }
                  }
            }   //end of load

 if (v==imagesteam) {
                File file = new File("/sdcard/documents/2.pdf");
                  if (file.exists()) {
                        Uri path = Uri.fromFile(file);
                        Intent intent = new Intent(Intent.ACTION_VIEW);
                        intent.setDataAndType(path, "application/pdf");
                        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                        try {
                            startActivity(intent);
                            overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
                        } 
                        catch (ActivityNotFoundException e) {

                        }
                  }
            }   //end of load

   }

  //menu inflator bits
          @Override
            public boolean onCreateOptionsMenu(Menu menu) {
                getMenuInflater().inflate(R.menu.activity_brain, menu);
                return true;
            }  

            @Override
            public boolean onOptionsItemSelected(MenuItem item) {
                switch (item.getItemId()) {
                    case android.R.id.home:
                        NavUtils.navigateUpFromSameTask(this);
                        return true;
                }
                return super.onOptionsItemSelected(item);
            }

}

我不确定在编写此应用时我是否遗漏了其他内容?如果有任何区别,下面是清单中的大脑和主要活动部分

   <activity
        android:name=".Main"
        android:label="@string/title_activity_main"
        android:screenOrientation="landscape" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <!-- <category android:name="android.intent.category.LAUNCHER" /> -->
        </intent-filter>
    </activity>
 <activity
        android:name=".Brain"
        android:label="@string/title_activity_brain"
        android:screenOrientation="landscape" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.trainer.Main" />
    </activity>

我完全没有想法为什么这个代码不起作用,我从其他活动的其他地方发布PDF并且URI方式运行良好,我错过了一些东西,但希望一双新鲜的眼睛会发现我不能发现的东西!< / p>

希望我提供了足够的细节,如果没有,请告诉我应该包括的内容。谢谢你的帮助,Andy

2 个答案:

答案 0 :(得分:0)

请点击此帖View the Task's activity stack

我的活动堆栈从主要活动到大脑活动打印出来(正确)

Running activities (most recent first):
  Run #3: ActivityRecord{41cd3948 u0 com.trainer/.Brain}
  Run #2: ActivityRecord{41ca29a0 u0 com.trainer/.Main}
  Run #1: ActivityRecord{41a2c5d8 u0 com.cyanogenmod.trebuchet/.Launcher}

所以到目前为止我觉得很好,但是当我从大脑活动中启动任何pdf时,这就是结果活动堆栈:

      Run #5: ActivityRecord{4154ca00 u0 com.adobe.reader/.ARViewer}
  Run #4: ActivityRecord{41bcbcf8 u0 com.trainer/.Main}
  Run #3: ActivityRecord{41cd3948 u0 com.trainer/.Brain}
  Run #2: ActivityRecord{41ca29a0 u0 com.trainer/.Main}
  Run #1: ActivityRecord{41a2c5d8 u0 com.cyanogenmod.trebuchet/.Launcher}

因此,由于某种原因打开PDF开始主要活动的另一个版本,btu我根本不知道为什么会发生这种情况?希望这对别人意味着什么?

感谢您提供的任何帮助......

答案 1 :(得分:0)

所以得到这个,将Brain的所有代码复制并粘贴到一个名为brain 2的新活动中,该应用程序运行正常。不知道为什么,不是一个整洁的解决方案,但至少它的工作原理!我曾经尝试过清理这个项目,但没有区别。至少它现在排序了。