Android:防止回到以前的活动

我想在Android上这样做:基本上当手机上按下“返回”button时,我想阻止特定活动返回到之前的状态。

具体来说,我有login和注册屏幕,当成功login/注册发生时,都会启动一个名为HomeScreen的新活动。 一旦HomeScreen启动,我想要防止用户能够返回login或按下BACK键注册屏幕。

我尝试使用Intent.FLAG_ACTIVITY_NO_HISTORY但由于应用程序已与Facebook集成,当使用Facebooklogin时,Facebook应该返回到初始login屏幕,因此我应该保持这些活动的历史。

当按下button并使用时,我想到HomeScreen上的BACKbutton的覆盖行为直接完成应用程序

 @Override public void onBackPressed() { finish(); } 

但是这也行不通。

我在Android开发中很新,所以任何帮助都会非常有用。

提前致谢。

我的build议是完成你不希望用户返回的活动。 例如,在您的login活动中,在您调用startActivity ,请调用finish() 。 当用户点击后退button时,他们将无法进入login活动,因为它已被杀死。

以下解决scheme在通常的login/主要活动场景或实现阻止屏幕中非常有用。

为了最小化应用程序而不是回到以前的活动,可以像这样覆盖onBackPressed()

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

moveTaskToBack(boolean nonRoot)保持原样,只是把你的任务(所有活动)放在后台。 与用户按Home键相同

参数boolean nonRoot – 如果为false,则只有在活动是任务的根时才起作用; 如果这是真的,它将适用于任务中的任何活动。

我不确定你想要什么,但听起来应该是可能的,而且听起来你已经走上了正轨。

以下是一些可能有所帮助的链接:

在android中禁用后退button

  MyActivity.java => @Override public void onBackPressed() { return; } 

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

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

finish()给你方法closures当前Activity不是整个应用程序。 而且你最好不要试图去寻找杀死应用程序的方法。 小小的build议。

你有没有试过Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_HISTORY联合 Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_HISTORY ? 记得在Intent开始活动中使用这个标志!

对于您的情况,有两种解决scheme,例如,如果活动A开始活动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.禁用返回button动作。

有两种方法可以防止返回事件如下,

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

希望它是有用的,但仍然取决于你的情况。

祝你好运 @。@

卢纳

finish()之后

 Intent i = new Intent(Summary1.this,MainActivity.class); startActivity(i); finish(); 

paulsm4的答案是正确的。 如果在onBackPressed()你只是返回,它将禁用后退button。 但是,我认为在您的使用情况下,更好的方法是翻转活动逻辑,即使您的主页活动成为主要活动,检查用户是否login,如果不是,则开始login活动。 原因在于,如果您在主要活动中覆盖后退button,大多数用户在按回时都会感到困惑,而您的应用程序则什么也不做。

只需重写onKeyDown方法并检查后退button是否被按下。

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

在ActivityStart之后立即停止活动,阻止任何回到它的方式。 然后加

 onCreate(){ getActionBar().setDisplayHomeAsUpEnabled(false); ... } 

对于你开始的活动。

如果你不想回到你的应用程序的所有活动,你可以使用

 android:launchMode="singleTask" 

在这里了解更多: http : //developer.android.com/guide/topics/manifest/activity-element.html

这种方法工作正常

 Intent intent = new Intent(Profile.this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);