我正在处理一个包含4种用户的简单登录表单。 onclicklisteners视图参数始终显示第一次单击的相同v.getId()值。例如,如果单击学生视图,则id值如果更新,但是如果我单击管理布局,则id仍然与学生保持一致。这发生在所有4个部分中。 监听器:
@Override
public void onClick(View v) {
loginActivityBinding.etPassword.setText("");
loginActivityBinding.etUsername.setText("");
loginActivityBinding.etPassword.setOnFocusChangeListener((v1, hasFocus) -> {
if (!Utils.isValidPassword(loginActivityBinding.etPassword.toString())) {
showToast("Please enter a valid password");
}
});
alertDialog.setPositiveButton("Login", (dialog, which) -> {
if (StringUtils.isEmpty(loginActivityBinding.etUsername.getText().toString(), loginActivityBinding.etPassword.getText().toString())) {
showToast("Error .Please fill all fields");
} else {
Timber.d(String.valueOf(v.getId()));
switch (v.getId()) {
case R.id.ll_Admin:
mainLoginViewModel.login(loginActivityBinding.etUsername.getText().toString(), loginActivityBinding.etPassword.getText().toString(), 1);
break;
case R.id.ll_faculty:
mainLoginViewModel.login(loginActivityBinding.etUsername.getText().toString(), loginActivityBinding.etPassword.getText().toString(), 2);
break;
case R.id.ll_student:
mainLoginViewModel.login(loginActivityBinding.etUsername.getText().toString(), loginActivityBinding.etPassword.getText().toString(), 3);
break;
case R.id.counsellorlayout:
mainLoginViewModel.login(loginActivityBinding.etUsername.getText().toString(), loginActivityBinding.etPassword.getText().toString(), 4);
break;
}
}
});
}
传递给viewmodel的标志值在第一次单击后保持不变。
答案 0 :(得分:0)
通过使用setOnClickListener方法创建单独的单击侦听器来修复它。肯定是糟糕的做法,但无法看到任何其他出路。