Клавиатура Gboard: числовой тип ввода не работает на EditText в ListView

Я использую стандартную клавиатуру Android Gboard. Но есть проблема, когда я использую inputType="number" на EditText, Клавиатура показана, но значения типа не отображаются в EditText, также не получая никакого значения типа в TextWatcher.

EditText в ListView Элемент выглядит следующим образом:

<EditText
    android:id="@+id/editTextChecked"
    android:layout_width="150dp"
    android:layout_height="60dp"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
    android:layout_gravity="center"
    android:gravity="center"      
    android:inputType="number"
    android:textColor="#000000" />

ListView определяется как:

<ListView
    android:id="@+id/listViewDialog"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/bottom"
    android:layout_below="@+id/editTextSearch"
    android:background="@android:color/white"
    android:divider="@android:color/darker_gray"
    android:dividerHeight="1dp" />

Это мой код TextWather:-

 holder.etCheck.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            Log.e("text",""+s.toString());
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

1 ответ

Вещь с TextWatcher является то, что это не так хорошо работает с ListViews. Вы должны определить свой собственный обычай TextWatcher как это:

private class MyCustomEditTextListener implements TextWatcher {
    private int position;

    public void updatePosition(int position) {
        this.position = position;
    }

    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
        // do your operations here.
    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
    }

    @Override
    public void afterTextChanged(Editable editable) {
        Logger.e(TAG, "After" + editable.toString());
    }      
}

и внутри getView() сделай это:

((Viewholder) holder).myCustomEditTextListener.updatePosition(position);

Наконец-то внутри вашего viewHolder инициализировать ваш EditText и добавить кастом TextWatcher к этому.

Другие вопросы по тегам