【问题标题】:How can I disable 'go back' to some activity?如何禁用“返回”某些活动?
【发布时间】:2011-09-16 15:06:59
【问题描述】:

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

@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);
    }
}

【问题讨论】:

    标签: android android-activity stack


    【解决方案1】:

    在启动下一个活动后立即在初始屏幕活动中调用finish()

    另一种方法是将此属性添加到AndroidManifest.xml 中的活动中:android:noHistory="true"

    例子:

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

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

    【讨论】:

    • 非常感谢 "android:noHistory="true""- 这很有帮助!
    • finish() (在开始下一个活动后立即添加到原始活动中)有效,因为 Android 不会“返回”到已完成(销毁)的活动,仅返回已暂停或停止的活动(活着)。
    • 使用android:noHistory="true"会造成麻烦,因为它不会清除所有任务,@A。 Binzxxxxxx 的回答更好
    【解决方案2】:

    只需在context.startActivity() 之后调用context.finish()

    【讨论】:

    • 不错的选择,称为forwarding
    • 在开始下一个活动时播放媒体文件时可能不起作用。因为它可能会被缩短。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:
      <activity android:name=".SplashActivity" android:noHistory="true"/>
      

      来自documentation

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

      值为“true”表示活动不会留下历史记录 痕迹。它不会保留在任务的活动堆栈中,因此 用户将无法返回。在这种情况下, 如果您开始另一个活动,则永远不会调用 onActivityResult() 此活动的结果。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多