Слушатель OnClick всегда показывает один и тот же v.getId()

avatar
Bismeet singh
8 апреля 2018 в 08:20
27
1
0

Я работаю над простой формой входа с 4 типами пользователей. Параметр представления onclicklisteners всегда показывает то же значение v.getId(), которое было нажато в первый раз. Например, если щелкнуть представление ученика, значение идентификатора будет обновлено, но если я нажму на макет администратора, идентификатор останется таким же, как у ученика. Это происходит со всеми 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;

                }
            }

        });
}

Значение флага, переданное модели представления, остается неизменным после первого щелчка.

Источник

Ответы (1)

avatar
Bismeet singh
8 апреля 2018 в 09:24
0

Исправлено путем создания отдельных прослушивателей кликов с использованием подхода setOnClickListener. плохой подход, конечно, но другого выхода не видел.