Я думаю, что лучший способ - написать собственный 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
}
}