在数据绑定中设置编辑文本的选择

问题描述 投票:0回答:1

我必须在editText中的单词末尾移动一个光标。对于这个任务,我使用了fun Fragment.moveCursorToEnd(editText: EditText) = editText.setSelection(editText.text.length)但是当我需要使用这个方法的时候,因为通过模型的DataBinding设置的文本并不是马上就有的,因为我的模型设置在 onCreateView 但我检查了编辑文本的内容,在 onViewCreated, onStartonResume 的方法,但在所有的地方我都没有得到我的文本。为了解决这个问题,我可以使用 onTextChanged 并调用方法 moveCursorToEnd() 这里,但可能有更好的方法。

android kotlin data-binding android-edittext
1个回答
0
投票

我认为最好的方法是写自己的 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)
   }
}

viewmodel:

class ViewModel : BaseObservable {
    // text is observable field
    @Bindable
    fun getCursorPosition(): Int {
        return text.length
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.