Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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>