使用onBackPressed时如何传递登录屏幕活动

时间:2012-08-28 14:18:45

标签: android

我的应用有三个主要活动。

  1. 启动活动
  2. 登录活动
  3. 菜单活动
  4. 当我启动应用程序时,启动屏幕工作四秒钟,然后它进入登录活动。如果用户登录成功,则应用程序进入菜单活动在我的菜单中,有注销按钮。如果用户点击它,那么app会登录登录活动。它运行正常。但是,如果用户不想注销并单击设备上的后退按钮,我想直接退出应用程序。如果我找不到这个问题的解决方案,用户必须进入登录屏幕,然后启动屏幕,最后当他们想要使用后退按钮退出应用程序时退出。我应该使用哪种解决方案?

5 个答案:

答案 0 :(得分:7)

登录成功后,您可以在启动菜单活动后立即在登录活动上致电finish()。这有效地从后栈中删除了Login Activity。

编辑:如下面的评论所述,这也适用于你的Splash Activity。

答案 1 :(得分:3)

@Keyboardsurfer提供的解决方案对您非常有用,但如果您想处理Back按钮事件,请使用以下代码获取有关后退按钮事件的通知。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK)) {
        Log.d(this.getClass().getName(), "back button pressed");  
        // your code to handle back button event.
        return true;
    }
    return super.onKeyDown(keyCode, event);
}  

答案 2 :(得分:2)

登录成功后,您应按如下方式调用您的菜单活动:

Intent intent=new Intent(LoginActivity.this,MenuActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
this.finish();

如果用户是通过SharedPreferences登录的,我认为你正在检查你的Splash Activity,你应该按照你在调用这两个活动中指定的方式关闭你的Splash Activity。

答案 3 :(得分:0)

你必须覆盖Activity的(仅限Splash)onPause方法:

以下是如何;

 @Override
protected void onPause() {

    super.onPause();
    this.finish();

}

并在登录活动中在登录完成后调用finish方法。答案已编辑(参见下面的讨论)

答案 4 :(得分:0)

I don't think it would cause unexpected behaviour in other Activities, only the Splash Activity cause its its onPause() that was override not the others, and since splash is only called once i don't think it matters.