OnClick侦听器始终显示相同的v.getId()

时间:2018-04-08 08:20:01

标签: android mvvm onclicklistener

我正在处理一个包含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的标志值在第一次单击后保持不变。

1 个答案:

答案 0 :(得分:0)

通过使用setOnClickListener方法创建单独的单击侦听器来修复它。肯定是糟糕的做法,但无法看到任何其他出路。