我想出去解决为什么我的一个活动无法正常使用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
答案 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的新活动中,该应用程序运行正常。不知道为什么,不是一个整洁的解决方案,但至少它的工作原理!我曾经尝试过清理这个项目,但没有区别。至少它现在排序了。