view.etTwo имеет значение null, так как view - это EditText, который вы редактируете в данный момент, и он не содержит все остальные правки.
Вы можете вызвать view.getParent (), чтобы вывести список всех представлений в родительском, найти следующий и сфокусироваться на нем.Много работы!
Или, чтобы сделать его более универсальным, вы можете расширить EditText следующим образом:
fun EditText.onTextChange(onAfterTextChanged: OnAfterTextChangedListener) {
addTextChangedListener(object :TextWatcher{
private var text = ""
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) = Unit
override fun afterTextChanged(s: Editable?) {
if (s?.length == 1) {
onAfterTextChanged.complete()
}
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) = Unit
})
}
interface OnAfterTextChangedListener {
fun complete ()
}
Затем в своей деятельности, где у вас есть edittexts, вызвать что-то вроде этого:
etOne.onTextChange(object: OnAfterTextChangedListener {
override fun complete() {
etTwo.requestFocus()
}
})
etTwo.onTextChange(object: OnAfterTextChangedListener {
override fun complete() {
etThree.requestFocus()
}
})
Это создает новый метод в EditText с именем onTextChange
(может вызываться как угодно).Этот метод вызывает ваш OnAfterTextChangedListener
в вашей деятельности, где у вас есть доступ ко всем вашим правкам.И он будет вызван afterTextChanged, если длина текста равна 1.