Слушатель кликов AutocompleteTextView вызывается дважды - PullRequest
6 голосов
/ 04 февраля 2020

У меня есть такой макет:

<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/input_birthdate"
    style="@style/ExposedDropDownMenu"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/birthdate">

    <AutoCompleteTextView
        android:id="@+id/autocomplete_birthdate"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:editable="false" />

</com.google.android.material.textfield.TextInputLayout>

С этим стилем:

<!-- ExposedDropdownMenu -->
<style name="ExposedDropDownMenu" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu">
    <item name="boxStrokeColor">@color/text_input_layout_outlined_box_stroke</item>
    <item name="hintTextColor">@color/green_2</item>
</style>

Я попытался установить прослушиватель щелчков при просмотре текста автозаполнения:

autoComplete.setOnClickListener(view -> {
    // This is called twice when i click the autocomplete textview
});

Слушатель вызывается дважды ... почему? Как я могу решить эту проблему?

РЕДАКТИРОВАТЬ: при удалении стиля первый щелчок (получение фокуса) игнорируется, затем второй щелчок вызывается правильно один раз, но я все равно теряю фоновый эффект «ряби».

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Вы должны попробовать приведенный ниже пример.

<com.google.android.material.textfield.TextInputLayout
            style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Click Event"
            app:boxStrokeColor="@color/til_selector"
            app:boxStrokeErrorColor="@color/colorRed_700"
            app:boxStrokeWidth="1dp">

            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/etClickEvent"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:maxLines="1"
                **android:focusableInTouchMode="false"** />

        </com.google.android.material.textfield.TextInputLayout>

Теперь установите программно

etClickEvent.inputType = 0
etClickEvent.setOnClickListener{
//PUT YOUR OWN 
}

Это работает нормально для меня.

0 голосов
/ 30 марта 2020

Вместо этого вы можете попробовать setOnTouchListener , он вызывается только один раз и сохраняет пульсации.

autocomplete_birthdate.setOnTouchListener { view, motionEvent ->
    if (motionEvent.action == ACTION_UP) {
        // Some code
    }
    return false
}
...