设置活动的顺序并从中返回

时间:2017-07-03 05:47:22

标签: android android-activity

我有一些活动:

  • 启动画面
  • 登录
  • 注册
  • 控制台

如果用户从未登录过,则会显示如下:

  

启动画面>登录>注册>仪表板

当我从仪表板中back时,它应该退出应用程序,跳过其他活动。

登录页面上的

noHistory在此处无效,因为有时用户将back来自注册。

如果用户之前已登录,则应如下所示:

  

启动画面>仪表板

如果用户退出,可能要使用其他帐户,则应该:

  

仪表板>登录>仪表板

但如果用户从新信息中心转到back,则不应该输入之前帐户的信息中心。

除此之外,我的应用程序包含多个模块,其中一些模块无法访问其他模块,因此可以在模块之间工作的解决方案会很有用。

我尝试了finish()startActivityForResult()的混合,并尝试检查活动的返回位置,但感觉非常黑客,耗费时间,并且在新的用例上搞砸了。还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

你应该做这样的事情

在你的启动活动中,我有一个方法:

   @Override
public void loadLoginScreen() {
    Intent intent = new Intent(this, LoginActivity.class);
startActivity(intent);
finish();
}

然后在登录活动中(我正在使用firebase,所以我检查用户是否为空,你可以应用你的逻辑检查相同)

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //Get Firebase auth instance
    if (auth.getCurrentUser() != null) {
      startActivity(new Intent(LoginActivity.this, HomeScreenActivity.class));
      finish();
    }
    // set the view now
    setContentView(R.layout.activity_login);
 }

当我注销时,我确实喜欢这个

     @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

      case R.id.milogout:
        FirebaseAuth.getInstance().signOut();
        startActivity(LoginActivity.class);
        finish();
        break;

    }
    return true;
  }

答案 1 :(得分:1)

以前的活动需要在移至信息中心时完成。在开始仪表板的新活动之前调用

finishAffinity();

完成当前活动以及紧接其下的所有活动。