Событие OnClick работает только второй раз на edittext

У меня есть edittext, и когда пользователь нажимает на этот edittext, я хочу показать alertdialog.
Мой код следующий:

edt.setInputType(InputType.TYPE_NULL); edt.setFocusableInTouchMode(true); edt.requestFocus(); edt.setCursorVisible(false); edt.setOnClickListener(new OnClickListener() { public void onClick(View v) { CommentDialog.buildDialog(mContext, identifier, false, edt.getId()); } }); 

Я не хочу, чтобы клавиатура отображалась, когда пользователь нажимает на edittext, поэтому я устанавливаю тип ввода в TYPE_NULL.
Но когда edittext не имеет фокуса, и я нажимаю его, событие onClick не выполняется. Когда я нажимаю его во второй раз, сигнал alertdialog отображается правильно.

Как это исправить?

Solutions Collecting From Web of "Событие OnClick работает только второй раз на edittext"

Просто попробуйте добавить это в свой XML файл. Клавиатура появляется, когда widget получает фокус. Таким образом, чтобы это поведение не было настроено на false . Тогда нормальное использование OnClickListener .

 <EditText android:focusable="false" ... /> 

Теперь это должно сработать.

Вы можете использовать onTouch вместо onTouch , поэтому не имеет значения, имеет ли EditText фокус или нет.

 edt.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { CommentDialog.buildDialog(mContext, identifier, false, edt.getId()); return false; } }); 

Сделайте диалоговое окно с предупреждением

setOnFocusChangedListener ()

Вам нечего делать,

 edt.setFocusable(false); 

Избегайте использования FocusChangeListener поскольку он будет вести себя беспорядочно, когда вам это не понадобится (например, при вводе активности). Просто установите OnTouchListener вместе с вашим OnClickListener следующим образом:

  @Override public boolean onTouch(View view, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: view.requestFocus(); break; } return false; } 

Это заставит ваш EditText получать фокус перед вызовом onClick.

Вместо установки типа ввода используйте «Editable = false» и «Focus = false», если вам не нужна клавиатура.

Это может быть полезно для вас.

Если focusableInTouchMode истинно, то прикосновение срабатывает только во втором касании, поэтому, если вы не хотите, чтобы этот случай использовал false для focusableInTouchMode. И если вы хотите включить фокусировку в представлении set focusable true

 <EditText android:focusable="true" android:focusableInTouchMode="false" ... /> 

Вы должны добавить onFocusChangeListener:

 edt.setKeyListener(null); edt.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if(hasFocus) { edt.callOnClick(); } } }); edt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { CommentDialog.buildDialog(mContext, identifier, false, edt.getId()); } }); 

Это была настоящая проблема для меня при попытке воспроизвести «щелчок» звука из EditText, когда всплывает мягкая клавиатура; Я получал только один клик каждый второй раз. То, что фиксировало это для меня, было противоположностью того, что работало для @neaGaze. Это работало для меня в my_layout.xml:

 <EditText android:focusable="true" android:focusableInTouchMode="true" ... /> 

Это позволяет звуку / событию щелчка каждый раз, когда пользователь вводит EditText, а также позволяет отображать мягкую клавиатуру. Конечно, вы должны обработать OnClickListener, чтобы это произошло, даже если вы ничего не делаете с ним, например:

 myEditText = (EditText) findViewById(R.id.myEditText); ... // implement the onClick listener so we get the click sound and event if needed myEditText.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { //do something or nothing; up to you } }); 

Говоря об этой надоедливой мягкой клавиатуре, если бы я закончил свою деятельность в стиле диалога с мягкой клавиатурой, независимо от того, что я пробовал, клавиатура осталась, когда я вернулся в MainActivity. Я пробовал все обычные предложения, такие как Close / Hide Android soft keyboard , Как закрыть программную клавиатуру Android программно и т. Д. Ничего из этого не сработало.

В моем случае мне не нужна мягкая клавиатура в MainActivity. Что было сделано в моем файле AndroidManifest.xml в разделе MainActivity

 <activity android:name=".MainActivity" android:windowSoftInputMode="stateAlwaysHidden"> </activity>