我正在尝试做与this问题类似的事情。
我有一个主应用程序A,子应用程序B和C. B是一个可搜索的字典,C是一个定义,所以如果你搜索很多单词,你最终可能看起来像A的堆栈> B> C> B> B> C> B> C> C> C ......等等。
每当我回去,我都想回到原来的B,所以我希望后排基本上停留在A> B一直都是。
我目前使用Intent进行设置,所以当从C按下后退按钮时,它会转到B的新实例,但这显然不是我想要的。
想法?
答案 0 :(得分:2)
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (splash.sdk < 5 && keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
onBackPressed();
}
return super.onKeyDown(keyCode, event);
}
//This will make the back button exit the app to the home screen.
@Override
public void onBackPressed() {
moveTaskToBack(true);
return;
}
答案 1 :(得分:2)
不应该从C回来带你到原来的B?所以堆栈应该如下所示:
A>
B>
C<
B>
C>
C<
C<
B<
A
with&gt;进入下一个活动,&lt;作为后退按钮?
你可以为所有的活动覆盖onBackPressed,所以对于C它会加载一个新的B,B它会加载一个新的A,而A你会加载moveTaskToBack(true);
,但这不是一个解决方案而是更多的黑客攻击使它工作。
尝试使用onResume,以便B像默认情况下那样出现。将任何相关变量设置为新活动中的变量。如果你在来自C时只想要这个,那么在加载C时有一个设置为true的类boolean,并在onResume或onRestart中检查它。如果是,则将所有内容设置为default / blank,并将boolean设置为false。如果没有,加载它是如何(这是如果他们回家并回到应用程序,基本上)。我不在我的办公桌,但我认为你会想要:
@Override
public void onResume() {
super.onResume();
if(fromC == true){
//Set all variables to load default dictionary
fromC = false;
}
}
}
这应该使原始B表现得像新的B.
或者说,你可以通过简单的方式完成它,当你调用意图加载这样的新B时:
startActivity(getIntent());
finish();
这将使得只有一个B.当你回去时它作为一个空白加载有点不同,需要类变量,或者我正在考虑的其他一些棘手的技巧。这就像你想要做的那样:.zip of small sample
如果您可以将代码重新编写为类似的东西(如果有意义的话,您可以使用适当的变量来设置正常工作)。
答案 2 :(得分:0)
您可以设置Intent
标志来执行此操作。假设您在Activity
C,并且想要致电Activity
B:您在名为Intent
的{{1}}上添加了一个标记。所以:
FLAG_ACTIVITY_CLEAR_TOP
这样做要么转到后端堆栈中的B的顶层实例(并清除顶部的其他所有内容),要么创建一个新实例(如果不存在)。如果有一种方法可以通过启动标志执行此操作,我还没有解决 - 有一些类似的模式,但我认为没有相同的。