Событие 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 появляется правильно.
Как это исправить?
Ответы
Ответ 1
Просто добавьте это в свой XML
файл. Клавиатура появляется, когда widget
получает фокус.
Поэтому, чтобы предотвратить такое поведение, установите значение false
. Тогда нормальное использование OnClickListener
.
<EditText
android:focusable="false"
...
/>
Теперь он должен работать.
Ответ 2
Вы можете использовать onTouch
вместо onClick
, поэтому не имеет значения, имеет ли объект EditText
фокус или нет.
edt.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
CommentDialog.buildDialog(mContext, identifier, false, edt.getId());
return false;
}
});
Ответ 3
Вам нечего делать, чтобы
edt.setFocusable(false);
Ответ 4
установите << → диалоговое окно оповещения на
setOnFocusChangedListener()
Ответ 5
Если focusableInTouchMode истинно, то прикосновение срабатывает только во втором касании, поэтому, если вы не хотите, чтобы этот случай использовал false для focusableInTouchMode. и если вы хотите включить фокусируемость в представлении set focusable true
<EditText android:focusable="true" android:focusableInTouchMode="false" ... />
Ответ 6
Избегайте использования 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.
Ответ 7
Вместо ввода типа ввода используйте "Editable = false" и "Focus = false", если вам не нужна клавиатура.
Это может быть полезно для вас.
Ответ 8
Вы должны добавить 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());
}
});
Ответ 9
Это была настоящая проблема для меня при воспроизведении звука "click" из 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. Я пробовал все обычные предложения, такие как Закрыть/скрыть мягкую клавиатуру Android, Как закрыть программную клавиатуру Android программно и т.д. Ничего из этого не получилось.
В моем случае мне не нужна мягкая клавиатура в MainActivity. Что было сделано в моем файле AndroidManifest.xml в разделе MainActivity
<activity
android:name=".MainActivity"
android:windowSoftInputMode="stateAlwaysHidden">
</activity>