没有一个Android历史堆栈清晰

时间:2012-05-28 20:43:06

标签: java android android-activity

我有一些活动喜欢

A-> Splash Screen
B-> Home Screen
C-> a List activity
D-> a View activty
E-> a List activity
F-> a View activty

Normaly应用程序以A - >开头乙

然后用户选择列表活动

然后用户从列表活动中选择一个视图。

我的问题是清除活动堆栈。

我的应用程序将跳转列表或查看活动到活动(使用facefook样式导航)

例如,用户选择列表活动C而不是选择查看活动D.在帽点处,用户可以跳转到活动E.在活动E中,如果用户按下o后退按钮,则用户转到活动D.

我想要去活动B(Home)。

我的意思是ı想要明确没有家庭活动的活动。

怎么能这样做?。

sory for awasome English。

感谢。

3 个答案:

答案 0 :(得分:2)

你可以像这样拦截后退按钮:

@Override
public void onBackPressed() {
    // You want to start B Activity
    Intent a = new Intent(this, B.class);

    // But you dont want it on top of E.
    a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    // Launching this will now remove every activity on top of B and bring B to front, not! relaunch it.
    startActivity(a);
}

您可能需要查看Android Intent flagsTasks and Back Stack Documentation

度过美好的一天!

修改

如果您想在按下后退时关闭应用程序:

@Override
public void onBackPressed() {
    moveTaskToBack(true);
}

答案 1 :(得分:1)

如果您希望用户从您的所有活动返回到B,则可以在呼叫任何意图时从其他所有活动中呼叫finish()。这样,它们就会从活动堆栈中删除。

此外,您可以覆盖后退按钮的行为:

@Override
public void onBackPressed() {
   Intent setIntent = new Intent(Intent.ACTION_MAIN);
   startActivity(setIntent);
}

但要确保它真的是你想要的。因为看起来你正在做一些非常糟糕的用户体验。阅读有关acitivty堆栈和任务的更多信息。应避免覆盖后退按钮的默认行为。

答案 2 :(得分:1)

您可以对AndroidManifest.xml文件中的活动元素使用标记android:noHistory =“true”。此标记允许不在活动堆栈中写入活动。