Выберите все в EditText с двусторонней привязкой данных - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть Activity с фрагментом ... В этом фрагменте я использую двустороннюю передачу данных в EditText.Этот EditText привязан к свойству Double объекта, и из-за этого мне пришлось реализовать InverseMethod для преобразования String -> Double и Double -> String ...

В моем EditText я настроил android: selectAllOnFocus = "true" , и я заставляю его также использовать метод фрагмента onCreateView: edQtd.selectAll ()

Проблема в том, что когдапоявляется фрагмент, EditText имеет фокус, но текст не выделен, вместо этого курсор находится перед первым числом ...

Я хотел, чтобы он отображался со всем выделенным текстом ...

Попытка вместо использования обратного метода просто конкатенировать пустую строку, но результат был тот же ...

Из того, что я видел, отладка, сгенерированный класс привязки устанавливает текст послесоздание фрагментов (после того, как я вручную вызвал edQtd.selectAll () ), сняв выделение ...

Есть идеи, как это решить?

Редактировать: Пока я решил это, добавив текстИзменилListener на EditText, где я выделяю весь текст только при первом изменении текста:

edQuantidade.addTextChangedListener(new TextWatcher() {
        @Override
        public void afterTextChanged(Editable s) {
            if(getSelectAllEdQtdText()) {
                edQuantidade.selectAll();
                setSelectAllEdQtdText(false);
            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }
    });

1 Ответ

0 голосов
/ 20 ноября 2018

Добавить следующие атрибуты в EditText в Layout.

<EditText
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:selectAllOnFocus="true"
    />

И удалить edQtd.selectAll() из кода.

Редактировать

Поскольку нет решенияработает.Это будет работать, потому что это вызовет selectAll после задержки.Добавьте это после установки модели в привязке.

    new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
        @Override
        public void run() {
            edQtd.selectAll();
        }
    }, 500);
...