防止Android返回按钮关闭应用程序

4

在我的应用中,我希望在用户登录后阻止他们返回到登录页面,但是我又不想关闭应用程序。例如,如果前一个活动是登录页面,在用户按下返回键时不希望发生任何事情,只需停留在当前活动/片段。


可能是点击两次返回按钮退出活动的重复问题。 - Haem
1
当用户完成登录后,请使用finish();命令,并且不要在主页面上提供返回按钮,这样他们就无法返回。 - Nigel Brown
4个回答

3
在登录活动中添加finish();,并在下一个活动中添加onBackPressed
  @Override
    public void onBackPressed() {

    }

0

正确的做法是在登录活动完成并启动下一个活动时,在登录活动中调用finish()。例如:

Intent intent = new Intent(LoginActivity.this, NextActivity.class);
startActivity(intent);
finish();

这将防止用户从NextActivity返回到LoginActivity,因为调用finish()会销毁LoginActivity并将其从后退堆栈中删除。

没有必要从NextActivity中删除onBackPressed,这可能会产生意想不到的后果(例如,如果他们从Login -> Next -> Other -> Next导航,然后单击返回,他们希望返回到Other)。在Next中禁用onBackPressed将防止这种情况发生。


没错,但是如果我在下一个活动中使用返回按钮,它会关闭应用程序,但我想留在当前的活动中。 - Artiom
1
标准的Android行为是,如果您按下返回按钮并且返回堆栈为空,则关闭应用程序。如果您想要非标准行为,则可以覆盖onBackPressed(可能会使用户感到困惑)。一种选择是从登录到下一个界面中通过意图传递一些数据,以指示是否禁用返回按钮。 - Tyler V

0
在你的 LoginActivity 的清单文件中添加 android:noHistory="true"
<activity android:name=".LoginActivity" android:noHistory="true">
  <intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.LAUNCHER"/>
  </intent-filter>
</activity>

0

只需删除 super.onBackPressed:

@Override
    public void onBackPressed() {
    //super.onBackPressed();
    . . .
}

它只会在用户点击返回按钮时进行检测,而不会关闭应用程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接