我有一些活动:
如果用户从未登录过,则会显示如下:
启动画面>登录>注册>仪表板
当我从仪表板中back
时,它应该退出应用程序,跳过其他活动。
noHistory
在此处无效,因为有时用户将back
来自注册。
如果用户之前已登录,则应如下所示:
启动画面>仪表板
如果用户退出,可能要使用其他帐户,则应该:
仪表板>登录>仪表板
但如果用户从新信息中心转到back
,则不应该输入之前帐户的信息中心。
除此之外,我的应用程序包含多个模块,其中一些模块无法访问其他模块,因此可以在模块之间工作的解决方案会很有用。
我尝试了finish()
和startActivityForResult()
的混合,并尝试检查活动的返回位置,但感觉非常黑客,耗费时间,并且在新的用例上搞砸了。还有更好的方法吗?
答案 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();
完成当前活动以及紧接其下的所有活动。