Android: 如何只在Kotlin中第一次显示一个画面?
Android: How to display a screen for the first time only in Kotlin?
我的应用程序有一个初始屏幕 (activity),要求用户输入他们的姓名,然后单击登录按钮。在用户执行此操作后,我不希望应用程序再次显示此屏幕,而是应用程序应该启动另一个 activity。我做了一些研究,发现您应该使用共享首选项,但我仍然感到困惑。以下是初始画面的代码activity:
class StudentNameInput : AppCompatActivity(), View.OnClickListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_student_name_input)
btnStudentLogIn.setOnClickListener(this)
}
private fun validate(): Boolean {
if (txt_student_name.text.toString().isEmpty()){
txt_student_name.error = "Name cannot be empty"
return false
}
return true
}
override fun onClick(v: View?){
when(v?.id){
R.id.btnStudentLogIn->{
if(validate()){
Log.i(null, "setOnClickListener")
val intent = Intent(this, StudentInitialActivity::class.java)
startActivity(intent)
}
}
}
}
您应该将用户名保存在共享首选项中,然后当您启动 activity 时,您需要检查共享首选项是否已保存用户名,如果是,则启动下一个 activity 和完成当前,但如果不,你留在当前 activity,像这样:
class StudentNameInput : AppCompatActivity(), View.OnClickListener {
private lateinit var sharedPref: SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sharedPref: SharedPreferences = getSharedPreferences("YOUR_PREF_NAME", Context.MODE_PRIVATE)
if (wasUserNameSaved()) {
val intent = Intent(this, StudentInitialActivity::class.java)
startActivity(intent)
finish()
return
}
setContentView(R.layout.activity_student_name_input)
btnStudentLogIn.setOnClickListener(this)
}
private fun validate(): Boolean {
if (txt_student_name.text.toString().isEmpty()){
txt_student_name.error = "Name cannot be empty"
return false
}
return true
}
override fun onClick(v: View?){
when(v?.id){
R.id.btnStudentLogIn->{
if(validate()){
Log.i(null, "setOnClickListener")
sharedPref.edit().putString("user_name", txt_student_name.text.toString()).apply()
val intent = Intent(this, StudentInitialActivity::class.java)
startActivity(intent)
}
}
}
}
private fun wasUserNameSaved(): Boolean {
return sharedPref.getString("user_name", "").isNotEmpty()
}
抱歉格式错误,我是从 phone 写的。
我的应用程序有一个初始屏幕 (activity),要求用户输入他们的姓名,然后单击登录按钮。在用户执行此操作后,我不希望应用程序再次显示此屏幕,而是应用程序应该启动另一个 activity。我做了一些研究,发现您应该使用共享首选项,但我仍然感到困惑。以下是初始画面的代码activity:
class StudentNameInput : AppCompatActivity(), View.OnClickListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_student_name_input)
btnStudentLogIn.setOnClickListener(this)
}
private fun validate(): Boolean {
if (txt_student_name.text.toString().isEmpty()){
txt_student_name.error = "Name cannot be empty"
return false
}
return true
}
override fun onClick(v: View?){
when(v?.id){
R.id.btnStudentLogIn->{
if(validate()){
Log.i(null, "setOnClickListener")
val intent = Intent(this, StudentInitialActivity::class.java)
startActivity(intent)
}
}
}
}
您应该将用户名保存在共享首选项中,然后当您启动 activity 时,您需要检查共享首选项是否已保存用户名,如果是,则启动下一个 activity 和完成当前,但如果不,你留在当前 activity,像这样:
class StudentNameInput : AppCompatActivity(), View.OnClickListener {
private lateinit var sharedPref: SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sharedPref: SharedPreferences = getSharedPreferences("YOUR_PREF_NAME", Context.MODE_PRIVATE)
if (wasUserNameSaved()) {
val intent = Intent(this, StudentInitialActivity::class.java)
startActivity(intent)
finish()
return
}
setContentView(R.layout.activity_student_name_input)
btnStudentLogIn.setOnClickListener(this)
}
private fun validate(): Boolean {
if (txt_student_name.text.toString().isEmpty()){
txt_student_name.error = "Name cannot be empty"
return false
}
return true
}
override fun onClick(v: View?){
when(v?.id){
R.id.btnStudentLogIn->{
if(validate()){
Log.i(null, "setOnClickListener")
sharedPref.edit().putString("user_name", txt_student_name.text.toString()).apply()
val intent = Intent(this, StudentInitialActivity::class.java)
startActivity(intent)
}
}
}
}
private fun wasUserNameSaved(): Boolean {
return sharedPref.getString("user_name", "").isNotEmpty()
}
抱歉格式错误,我是从 phone 写的。