Android:防止回到上一个活动
我想在Android上这样做:基本上当手机按下BACK按钮时,我想阻止特定活动返回到之前的活动。Android:防止回到上一个活动
具体来说,我有登录和注册屏幕,当成功登录/注册时,都会启动一项名为HomeScreen
的新活动。一旦启动了HomeScreen,我想要防止用户能够通过按下BACK键返回登录或注册屏幕。
我尝试使用Intent.FLAG_ACTIVITY_NO_HISTORY
,但由于应用程序已与Facebook集成,因此当使用“使用Facebook登录”时,Facebook应该返回到初始登录屏幕,因此我应该保留这些活动的历史记录。
我想重写上HomeScreen
BACK按钮的行为是按下按钮时,直接完成应用程序的,我用
@Override
public void onBackPressed() {
finish();
}
但也不能正常工作。
我在Android开发中很新,所以任何帮助都会非常有用。
在此先感谢。
我的建议是完成您不希望用户返回的活动。例如,在您的登录活动中,在您致电startActivity
后,请致电finish()
。当用户点击后退按钮时,他们将无法进入登录活动,因为它已被杀死。
我不确定你想要什么,但它听起来应该是可能的,而且这听起来像你已经走上了正轨。
这里有几个环节,这可能有助于:
Disable back button in android
MyActivity.java =>
@Override
public void onBackPressed() {
return;
}
How can I disable 'go back' to some activity?
AndroidManifest.xml =>
<activity android:name=".SplashActivity" android:noHistory="true"/>
我不能使用noHistory选项,因为我试图在我的问题中解释Facebook问题,也是其中一条评论。但是BACK按钮并没有关闭它,而是让它退出整个应用程序,如'System.exit(0)'(我知道它不是最好的practive,但我只是想举一个例子)。 – ecem 2011-12-26 00:48:24
从void返回? – 2015-08-01 01:03:50
finish()
给你方法来关闭当前的活动不是整个应用程序。而且你最好不要去寻找杀死应用程序的方法。小小的建议。
你试过Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_HISTORY
的联合吗?请记住在Intent
开始活动中使用此标志!
paulsm4的回答是正确的。如果在onBackPressed()
中您只是返回,它将禁用后退按钮。不过,我认为根据您的使用情况,更好的方法是翻转活动逻辑,即将家庭活动作为主要活动,检查用户是否已登录,如果不是,则开始登录活动。原因是,如果您在主要活动中覆盖后退按钮,则大多数用户在向后按压时都会感到困惑,而您的应用什么也不做。
以下解决方案在通常的登录/主要活动场景或实施阻止屏幕中非常有用。
为了最大限度地减少应用程序,而不是回到以前的活动,您可以覆盖onBackPressed()
这样的:
@Override
public void onBackPressed() {
moveTaskToBack(true);
}
moveTaskToBack(boolean nonRoot)
离开你的背部栈是什么,只要把你的任务(所有活动)的背景。 与用户按下主页按钮相同。
参数boolean nonRoot
- 如果为false,则仅当该活动是任务的根时才适用;如果属实,它将适用于任务中的任何活动。
将
finish();
紧接着 ActivityStart 停止活动防止回去给它的任何方式。 然后添加
onCreate(){
getActionBar().setDisplayHomeAsUpEnabled(false);
...
}
返回到您正在开始的活动。
只需重写onKeyDown方法并检查后退按钮是否被按下。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
//Back buttons was pressed, do whatever logic you want
}
return false;
}
将finish()
刚过
Intent i = new Intent(Summary1.this,MainActivity.class);
startActivity(i);
finish();
如果你不想回去给所有对应用程序的活动,你可以使用
android:launchMode="singleTask"
这里了解更多:http://developer.android.com/guide/topics/manifest/activity-element.html
您的情况有两种解决方案,如活动A s挞到活动B,但是你不想回到活动B的活动A.
1.从反向堆栈中删除先前的活动A.
Intent intent = new Intent(activityA.this, activityB.class);
startActivity(intent);
finish(); // Destroy activity A and not exist in Back stack
2.禁用回去按钮操作。
有两种方法可以防止如下回去事件,
1)推荐的方法
@Override
public void onBackPressed() {
}
2)覆盖的onkeydown方法
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK) {
return false;
}
return super.onKeyDown(keyCode, event);
}
希望它是有用但仍然取决于你的情况。
好运@。@
月神
这种方法工作正常
Intent intent = new Intent(Profile.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
只是为了澄清,你想捕捉回来的人,除Facebook的行为? – havexz 2011-12-25 19:16:37
从某种意义上说是的,但实际上我想要的是在成功登录并且HomeScreen打开之后,用户不应该能够通过按BACK按钮返回到登录屏幕。就像Twitter或Foursquare一样,一旦我们登录到这些应用程序,我们在注销之前不会看到登录页面(即使我们在登录后按BACK)。 – ecem 2011-12-26 00:40:00