Как последовательно запускать событие «onPaste» в EditText для проверки и форматирования номера телефона?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как последовательно запускать событие «onPaste» в EditText для проверки и форматирования номера телефона?

Сообщение Anonymous »

Я работаю над приложением для Android, в котором мне нужно проверять и форматировать номера телефонов при вставке в EditText. Вот что у меня есть на данный момент:
Когда я впервые вставляю номер телефона, событие onPaste запускается, как и ожидалось, и проверка/форматирование работает отлично.
Однако, если я удалю все символы и вставлю снова, поведение, похоже, переключится на событие onInput вместо onPaste, что нарушит желаемую функциональность.
Мне бы хотелось операция вставки, чтобы всегда вызывать событие onPaste независимо от состояние EditText.
Я пробовал следующие вещи.

[*]Реализовал TextWatcher для отслеживания изменений в EditText. .
[*]Переопределен onTextChanged для обработки форматирования при изменении ввода.
[*]Попытка использовать ClipboardManager для обнаружения событий вставки.
< /ol>
`класс PhoneNumberWatcher(
private val editText: EditText,
private val onInvalidPhoneNumber: (() -> Unit)? = null
) : TextWatcher {

Код: Выделить всё

private var isUpdating = false

override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}

override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}

override fun afterTextChanged(s: Editable?) {
if (isUpdating) return

val originalText = s.toString()

// Format the phone number and set the maximum length
val formattedNumber = AppUtils.formatMobileNo(originalText)
val maxLength = if (formattedNumber.length > 11) 15 else 11
editText.filters = arrayOf(InputFilter.LengthFilter(maxLength))

// Update the EditText if the formatted number is different
if (formattedNumber != originalText) {
isUpdating = true
editText.setText(formattedNumber)
editText.setSelection(formattedNumber.length)
isUpdating = false
}

// Trigger callback if the formatted number is too long
if (formattedNumber.length > 11) {
onInvalidPhoneNumber?.invoke()
}
}
}`
Как я могу гарантировать, что вставка номера телефона в EditText всегда запускает событие onPaste, даже после очистки поля? Существуют ли какие-либо рекомендации по согласованному обнаружению событий вставки и форматированию номера телефона в этом случае?
Будем очень признательны за любую информацию или примеры кода.

Подробнее здесь: https://stackoverflow.com/questions/792 ... er-validat
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»