任务三 校验登录信息
一、任务目标
为关闭按钮和登录按钮添加点击处理。点击登录时依次检查用户名、密码和用户协议的勾选状态;未通过检查时显示对应提示,通过检查时显示临时的登录提示。
二、添加关闭与登录按钮点击事件
先给两个按钮添加点击处理:点击关闭按钮时结束登录页,点击登录按钮时显示一条临时提示,确认按钮可以使用。
1. 为两个按钮添加点击事件
打开 LoginActivity.kt,导入 Toast,并在 LoginActivity 中添加 initViews() 方法:
import android.widget.Toast
class LoginActivity : BaseActivity() { // ... 省略成员变量和已经存在的 onCreate()。
private fun initViews() { binding.closeBtn.setOnClickListener { finish() }
binding.loginBtn.setOnClickListener { // 先用临时提示检查按钮点击,下一步再接入输入校验。 Toast.makeText(this, R.string.label_login_btn, Toast.LENGTH_SHORT).show() } }}finish() 会关闭登录页;Toast 会短暂显示“登录”。这条提示只用于检查按钮是否能点击,后面会换成输入校验。
2. 在 onCreate() 中调用 initViews()
在 onCreate() 方法中,完成 Data Binding 设置后调用 initViews():
class LoginActivity : BaseActivity() { // ... 省略成员变量。
override fun onCreate(savedInstanceState: Bundle?) { ... // 页面创建时,为关闭和登录按钮绑定点击事件。 initViews() }
// ... 省略上一步已经完成的 initViews()。}这样,打开登录页时就会调用 initViews(),两个按钮才能响应点击。
3. 运行验证
运行应用并进入登录页。点击左上角的关闭按钮,确认登录页关闭;重新运行应用,点击“登录”按钮,确认页面下方短暂显示“登录”。
三、校验用户名
点击登录按钮后,先检查用户名。若未填写,就显示提示并结束本次点击处理。
1. 添加用户名非空校验
在 initViews() 方法后添加 handleLogin():
class LoginActivity : BaseActivity() { // ... 省略已有成员和方法。
private fun handleLogin() { val username = binding.etUsername.text?.toString().orEmpty() if (username.isEmpty()) { Toast.makeText(this, R.string.toast_lack_of_username, Toast.LENGTH_SHORT).show() // 用户名未填写,本次登录不再继续检查。 return } }}binding.etUsername.text 取得输入框中的用户名;toString() 将它转成字符串,orEmpty() 在没有内容时得到空字符串。
如果用户名为空,就显示“用户名不能为空”。随后执行 return,不再检查密码和协议。
2. 登录按钮调用校验方法
回到 initViews(),将登录按钮原来的临时提示换成 handleLogin()。关闭按钮的代码保持原样。
class LoginActivity : BaseActivity() { // ... 省略已有成员和 onCreate()。
private fun initViews() { // ... 保留关闭按钮的点击事件。
binding.loginBtn.setOnClickListener { Toast.makeText(this, R.string.label_login_btn, Toast.LENGTH_SHORT).show() handleLogin() } }
// ... 保留已经完成的 handleLogin()。}3. 运行验证
用户名和密码都留空,也不勾选协议。点击“登录”后,应只看到“用户名不能为空”。
四、校验密码
用户名已填写时,再检查密码是否为空。
1. 添加密码非空校验
在 handleLogin() 中,紧接用户名校验的 if 代码块后添加密码校验:
class LoginActivity : BaseActivity() { // ... 省略已有成员和方法。
private fun handleLogin() { // ... 省略已经完成的用户名读取和空值校验。
val password = binding.etPassword.text?.toString().orEmpty() if (password.isEmpty()) { Toast.makeText(this, R.string.toast_lack_of_password, Toast.LENGTH_SHORT).show() return } }}先检查用户名,再检查密码。两项都为空时,页面会先提示填写用户名。
2. 运行验证
填写用户名,密码留空,点击“登录”。页面应显示“密码不能为空”。
五、校验协议勾选状态
用户名和密码都已填写时,再检查用户协议是否勾选。
1. 添加勾选状态判断
在 handleLogin() 中,紧接密码校验的 if 代码块后添加:
class LoginActivity : BaseActivity() { // ... 省略已有成员和方法。
private fun handleLogin() { // ... 省略已经完成的用户名校验和密码校验。
// 未勾选协议时,停止本次登录处理。 if (!binding.cbAgreement.isChecked) { Toast.makeText(this, R.string.toast_lack_of_agreement, Toast.LENGTH_SHORT).show() return } }}binding.cbAgreement.isChecked 表示协议是否已勾选;前面的 ! 表示“没有勾选”。因此,未勾选时会显示提示并结束本次处理。
2. 运行验证
填写用户名和密码,不勾选协议,点击“登录”。页面应显示“请阅读并同意用户隐私协议”。
六、显示校验通过提示
三项检查都通过后,先显示“登录中…”,确认程序走到了这里。下一任务再接入登录请求。
1. 添加临时 Toast
在 handleLogin() 中,紧接协议校验的 if 代码块后添加临时提示:
class LoginActivity : BaseActivity() { // ... 省略已有成员和方法。
private fun handleLogin() { // ... 省略已经完成的用户名、密码和用户协议校验。
// 暂时提示校验通过,任务四会替换为真实登录请求。 Toast.makeText( this, R.string.message_logging, Toast.LENGTH_SHORT ).show() }}2. 运行验证
填写用户名和密码,勾选协议,点击“登录”。页面应显示“登录中…”。
再分别尝试用户名为空、密码为空和未勾选协议,确认对应的提示仍能显示。
任务小结
本任务为关闭和登录按钮添加了点击处理。登录时,程序依次检查用户名、密码和协议勾选状态;未通过检查就显示提示并停止处理。