为何从SignupActivity跳转至LoginActivity时会直接进入HomeActivity?
解决从SignupActivity跳转LoginActivity时自动进入MainActivity的问题
当前代码在LoginActivity启动阶段直接检测FirebaseAuth的当前用户,而用户从SignupActivity跳转过来时,已经完成注册并处于登录状态,因此触发自动跳转逻辑,跳过了LoginActivity。以下是两种可行的解决方式:
方案一:通过Intent标记区分跳转来源
在SignupActivity跳转LoginActivity时,添加一个标记参数,告知LoginActivity当前是从注册页跳转而来:
Intent loginIntent = new Intent(SignupActivity.this, LoginActivity.class); loginIntent.putExtra("FROM_SIGNUP", true); startActivity(loginIntent);
修改LoginActivity中的判断逻辑,仅当不是从Signup跳转过来时,才执行自动登录跳转:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); boolean fromSignup = getIntent().getBooleanExtra("FROM_SIGNUP", false); FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); if (user != null && !fromSignup) { Intent i = new Intent(Login.this, MainActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(i); } else { if (user == null) { Log.d(TAG, "onAuthStateChanged:signed_out"); } // 初始化登录界面控件、绑定事件等逻辑 } }
方案二:注册成功后直接跳转主界面(更符合常规用户流程)
用户完成注册后已处于登录状态,无需返回LoginActivity,直接跳转到MainActivity即可:
// SignupActivity中注册成功后的处理逻辑 FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this, task -> { if (task.isSuccessful()) { // 注册成功,直接进入主界面 Intent mainIntent = new Intent(SignupActivity.this, MainActivity.class); mainIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(mainIntent); finish(); // 关闭SignupActivity,避免返回时回到注册页 } else { // 处理注册失败逻辑 Log.w(TAG, "createUserWithEmail:failure", task.getException()); Toast.makeText(SignupActivity.this, "注册失败", Toast.LENGTH_SHORT).show(); } });
内容的提问来源于stack exchange,提问作者Okashi
相关产品推荐
相关产品推荐

