Событие 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 отображается правильно.

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

Просто попробуйте добавить это в свой 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> 
Intereting Posts
Как воспроизводить видео на Android-планшете с мобильным мобильным телефоном, и они нестабильны? Видеопоток реального времени / нулевой латентности: какие параметры кодека использовать? Android-эквивалент UIWebView в Xcode Android: выравнивание текста вправо, но не в центре RxJava + Retrofit – сделать несколько вызовов Отключение AutoHideSplashScreen для Android не работает Определите, работает ли на корневом устройстве API Android Android v2 с настраиваемыми маркерами Блокировка от вторжения отключена на переднем плане с режимом Doze – новая оптимизация батарей в Android M Использование PHP-сессий с моим Android-приложением для входа в систему Java.lang.NoClassDefFoundError: com.acme.R $ расположение ссылок на андроидную библиотеку Какие разрешения необходимы для всех основных поставщиков рекламных объявлений для Android? Почему Location.distanceBetween генерирует исключение для параметра результата? Получить фильтр для приемников Неверно настроены службы игр для Android. Кто-нибудь знает, как исправить?