如何禁用“返回”某些活动?

时间:2011-06-16 18:23:27

标签: android android-activity stack

我不希望用户能够回到我的应用程序的启动画面。一个解决方案似乎是检查当前活动下面的活动是否是启动画面的实例,并在这种情况下退出应用程序,如下面的代码所示。但是,我不知道如何检查堆栈中先前的活动是什么。有人可以帮忙吗?有没有其他方法可以禁用“返回”给定的活动?

@Override
public void onBackPressed() { 
    if(<previous activity in stack is an instance of splashscreen>){   
        Intent exit_intent=new Intent(CurrentActivity.this, SplashScreen.class);
        exit_intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        exit_intent.putExtra("EXIT", true);
        context.startActivity(exit_intent);
    }
}

4 个答案:

答案 0 :(得分:121)

在开始下一个活动后立即在启动画面活动中调用finish()

另一种方法是在AndroidManifest.xmlandroid:noHistory="true"

中将此属性添加到您的活动中

示例:

<activity android:name=".SplashActivity" android:noHistory="true"/>

此属性指示Android在导航离开后从历史记录堆栈中删除SplashActivity。

答案 1 :(得分:19)

只需在context.finish()

之后致电context.startActivity()

答案 2 :(得分:9)

从您的启动画面调用下一个Activity时尝试以下操作:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);

答案 3 :(得分:2)

<activity android:name=".SplashActivity" android:noHistory="true"/>

来自documentation

  

是否应从活动堆栈中删除活动   并在用户导航时完成(调用其finish()方法)   从它,它不再在屏幕上可见 - 如果它应该是“真实的”   完成,如果没有,则“假”。默认值为“false”。

     

值“true”表示活动不会留下历史记录   跟踪。它不会保留在任务的活动堆栈中,所以   用户将无法返回。在这种情况下,   如果你为a启动另一个活动,则永远不会调用onActivityResult()   这项活动的结果。

     

此属性是在API Level 3中引入的。