当在电话上按下BACK按钮时,我想阻止特定活动返回到之前的活动 .
具体来说,我有登录和注册屏幕,当成功登录/注册时,都会启动一个名为 HomeScreen
的新活动 . 启动HomeScreen后,我想通过按BACK键阻止用户返回登录或注册屏幕 .
我尝试使用 Intent.FLAG_ACTIVITY_NO_HISTORY
,但由于应用程序有Facebook集成,当使用'Login with Facebook'时,Facebook应该返回初始登录屏幕,因此我应该保留这些活动的历史记录 .
我想在 HomeScreen
上覆盖BACK按钮的行为,以便在按下按钮时直接完成应用程序并且我使用了
@Override
public void onBackPressed() {
finish();
}
但这也行不通 .
12 回答
This method is working fine
只需覆盖onKeyDown方法并检查是否按下了后退按钮 .
放
在ActivityStart之后立即停止活动,阻止任何方式返回它 . 然后加
到您正在开始的活动 .
我的建议是完成您不希望用户返回的活动 . 例如,在您的登录活动中,在您致电
startActivity
之后,请致电finish()
. 当用户点击后退按钮时,他们将无法进入登录活动,因为它已从堆栈中杀死 .以下解决方案在通常的登录/主要活动场景或实现阻止屏幕时非常有用 .
要最小化应用程序而不是返回上一个活动,您可以像这样覆盖
onBackPressed()
:moveTaskToBack(boolean nonRoot)
按原样离开你的后栈,只需将你的任务(所有活动)放在后台 . Same as if user pressed Home button .参数
boolean nonRoot
- 如果为false,则仅当活动是任务的根时才有效;如果为true,它将适用于任务中的任何活动 .我不确定你想要什么,但听起来应该是可能的,而且听起来你已经走在了正确的轨道上 .
以下是一些可能有用的链接:
Disable back button in android
How can I disable 'go back' to some activity?
您的案例有两种解决方案,例如,如果活动A开始活动B,但您不想返回活动B中的活动A.
1. Removed previous activity A from back stack.
2. Disabled go back button action.
有两种方法可以防止返回事件,如下所示,
1)推荐方法
2)覆盖onKeyDown方法
希望它有用,但仍取决于你的情况 .
finish()
为您提供了关闭当前Activity而非整个应用程序的方法 . 而你最好不要试图寻找杀死应用程序的方法 . 小建议 .你试过
Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_HISTORY
的结合吗?记得在Intent
开始活动中使用此标志!paulsm4的答案是正确的 . 如果在
onBackPressed()
中你刚刚返回,它将禁用后退按钮 . 但是,我认为根据您的用例更好的方法是翻转活动逻辑,即将您的家庭活动作为主要活动,检查用户是否在那里登录,如果没有,则启动登录活动 . 原因是,如果您覆盖主活动中的后退按钮,大多数用户在按下时会感到困惑,而您的应用程序什么都不做 .紧接着
finish()
如果您不想返回应用程序上的所有活动,则可以使用
在这里了解更多:http://developer.android.com/guide/topics/manifest/activity-element.html
当您创建
onBackPressed()
时,只需删除super.onBackPressed();
即可