簡體   English   中英

EditText append 在 SDK 31 上重復數字

[英]EditText append is duplicating numbers on SDK 31

注意:這似乎只發生在 Android 12 (SDK 31)

我有一個非常復雜的 TextWatcher 用例,其中我需要在用戶鍵入時更改文本,但是我可能需要更改的不僅僅是他們剛剛鍵入的字符。 出於這個原因,我不能使用 InputFilter。

對於這個例子,為了突出我看到的錯誤,我已經簡化了我的用例。 我只想在輸入的每個字符后添加一個空格。

在我的 TextWatcher 中:

override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
   editText.removeTextChangedListener(this)
   addSpace(s, start, before, count)
   editText.addTextChangedListener(this)
}

private fun addSpace(s: CharSequence?, start: Int, before: Int, count: Int) {
   val text = s ?: return
   val spaced = "$text  "
   editText.text.clear()
   editText.text.append(spaced)
}

注意:我使用 clear() 和 append() 來避免鍵盤切換。 如果我使用 setText(),將切換回默認鍵盤。

這在添加字母時效果很好:

在此處輸入圖像描述

但是,當添加數字時,它將重復每個數字。 添加一些日志記錄,似乎在我的更改完成后再次調用 onTextChanged 並且我重新添加了偵聽器。

在此處輸入圖像描述

Again this works just fine on SDK 30, and SDK 32, so it seems Android fixed the regression, but does not yet have a patch for SDK 31. Has anyone run into this? 知道是否有我可以關注的現有票嗎? 無法找到對此的任何參考。

根據TextWatcher#onTextChanged的文檔:

調用此方法是為了通知您,在 s 內,從 start 開始的 count 個字符剛剛替換了之前有 length 的舊文本。 嘗試通過此回調對 s 進行更改是錯誤的。

重點是我的。 s: CharSequence? editText.text指的是相同的結構,因此您的代碼正在進行禁止的更改,並且似乎會產生不可預測的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM