0

我想弄清楚为什么我的一项活动无法使用 stack.back 按钮正常工作。

当用户在 Main 活动中按下图像按钮时,Activity Brain 会启动,这可以正常工作,并且后退按钮的行为与 Brain 的预期一样(即,它按预期返回到 main 活动)。

在大脑中,我想根据用户按下的图像按钮启动 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 方式运行良好,我遗漏了一些东西,但希望一双新的眼睛会发现我不能!

希望我提供了足够的细节,如果没有,请告诉我应该包括什么。感谢您的帮助,安迪

4

2 回答 2

0

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

于 2013-02-07T15:39:40.187 回答
0

所以按照这篇文章在这里查看任务的活动堆栈

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

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 我完全不知道为什么会这样?希望这对其他人意味着什么?

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

于 2013-02-07T07:18:01.033 回答