我有Activity A
(主要)和Activity B
。
事实:活动A有:android:launchMode="singleInstance"
通常的情况是:
Activity A
。用户点击商品> Activity B
3.A。如果用户点击后退/上移按钮>返回A
(不在B上调用finish())
B
。http://i41.tinypic.com/jkyuyg.jpg
3.B。如果用户单击“主页”,则转到任务管理器并将应用程序置于前面> Activity B
(一切都很好,到目前为止)
Activity A
(后退按钮预计会以这种方式工作,所以让我们专注于UP按钮)。以下是我在Activity B
中对BACK和UP按钮的实现。
@Override
public void onBackPressed() {
moveTaskToBack(true);
// I don't want to finish() the activity, so the user can reclick the same
// item without reloading the whole activity again (webview slow when parsing html).
return;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
moveTaskToBack(true);
// I don't want to finish() the activity... idem.
// I need to implement here the bring Activity A to front
break;
}
}
所以,我想要的是:到“返回”到Activity A
保持使用堆栈重新加载活动B的想法,如果需要,不使用Intents(除非它调用活动到前面,不添加项目到堆栈。)
如果我清楚地解释了自己以及是否需要更多信息,请告诉我。
更新
我在http://developer.android.com/training/implementing-navigation/ancestral.html
找到了这个这就是我改编它的方式。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent upIntent = new Intent(this, Activity_A.class);
if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
TaskStackBuilder.create(this).addNextIntentWithParentStack(upIntent).startActivities();
} else {
moveTaskToBack(true); // I want it this way. Don't worry.
}
break;
}
}
但NavUtils.shouldUpRecreateTask方法总是返回false。
我做了http://developer.android.com/training/implementing-navigation/ancestral.html#SpecifyParent部分,所以这不是问题。
我的问题是,我想知道堆栈中是否存在Activity A
,以及是否从任务管理器启动应用程序。
我怎样才能做到这一点? 感谢。
答案 0 :(得分:1)
moveTaskToBack将整个任务移动到后台。它没有完成活动。
为了完全控制活动,您有一些可能的解决方案:
为活动创建自己的全球经理,在整个生命周期中监控每个活动,并决定在每个活动中做些什么。
你也可以在离开它之后立即完成每个活动,并将“它”(只是它的名字或其他东西)放在一个堆栈中,并在你回到它时恢复它的状态。
使用片段,并在一个活动上管理它们。但是请注意配置更改。