Установить выбор для редактирования текста в привязке данных - PullRequest
0 голосов
/ 29 апреля 2020

Мне нужно переместить курсор в конец слова в тексте редактирования. Для этой задачи я использую fun Fragment.moveCursorToEnd(editText: EditText) = editText.setSelection(editText.text.length) Но когда мне нужно использовать этот метод, потому что текст через модель настроек DataBinding не сразу, потому что я установил свою модель в onCreateView, но я проверил содержание редактируемого текста в onViewCreated, onStart и onResume метод фрагмента и везде я не получаю свой текст. Для решения этой проблемы я могу использовать onTextChanged и вызвать метод moveCursorToEnd() здесь, но, возможно, есть лучший способ.

1 Ответ

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

Я думаю, что лучший способ - написать собственный BindingAdapter.

Здесь документация о BindingAdapters и, если вам нужно Двухстороннее связывание данных также.

Пример Kotlin,

макет:

<EditText
    android:id="@+id/editText"
    app:cursorPosition="@{viewmodel.cursorPosition}"/>

адаптер привязки:

object EditTextBindingAdapters {
   @BindingAdapter("cursorPosition")
   fun setCursorPosition(editText: EditText, cursorPosition: Int) {
       editText.setSelection(cursorPosition)
   }
}

модель представления:

class ViewModel : BaseObservable {
    // text is observable field
    @Bindable
    fun getCursorPosition(): Int {
        return text.length
    }
}
...