我使用共享首选项登录和注销应用程序的用户。一旦用户登录,在应用程序被终止并重新启动后,登录屏幕将不会再次显示。但当我进入应用程序,进入登录页面后的屏幕并按下后退按钮时,它会再次显示登录屏幕。即使按下后退按钮,我也不希望登录屏幕再次显示。我希望它完全不适用于按下后退按钮。这是我的登录代码:
val sp = getSharedPreferences("login",MODE_PRIVATE)
if (sp.getBoolean("logged", false))
{
login()
}
loginButton.setOnClickListener() {
login()
sp.edit().putBoolean("logged", true).apply()
Log.v("Login Msg", "Login button clicked")
getusername = findViewById(R.id.usernameEditText)
var username = usernameEditText.text
Log.v("username",username.toString())
getpass = findViewById(R.id.passEditText)
var pass = passEditText.text
Log.v("pass",pass.toString()) }
fun login() {
val i = Intent(this, HomeActivity::class.java)
startActivity(i)
}
这是注销的代码:
logoutButton.setOnClickListener(){
logout()
val sp = getSharedPreferences("login",MODE_PRIVATE)
sp.edit().putBoolean("logged", false).apply()
Log.v("Logout msg", "Logout button clicked")
}
fun logout(){
val i = Intent(this, LogInActivity::class.java)
startActivity(i)
}
实际上我们可以覆盖"后退按钮";方法。
下面,当按下后退按钮时,我会重用您的代码来管理注销,也许这就是您正在寻找的
override fun onBackPressed() {
super.onBackPressed()
val sp = getSharedPreferences("login",MODE_PRIVATE)
sp.edit().putBoolean("logged", false).apply()
logout()
}
之所以会发生这种情况,是因为登录活动在进入HomeActivity后仍在后堆栈中。为了达到您的要求,您必须在进入HomeActivity之前从后堆栈中删除所有内容。
将您的登录功能替换为以下功能。
fun login() {
val i = Intent(this, MainActivity::class.java)
i.run {
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
startActivity(i)
}
在这里,我们基本上是在意向中添加一组标志
Intent.FLAG_ACTIVITY_CLEAAR_TOP清除当前视图下的所有视图
Intent.FLAG_ACTIVITY_CLAAR_TASK我们正在删除现有任务Intent.FLAG_ACTIVITY_NEW_TASK我们正在为HomeActivity创建一个新任务
Intent.FLAG_ACTIVITY_CLEAR_TASK和Intent.FlagG_ACTIVITY_NEW_TASK应同时使用。