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