当前位置: 首页 > 知识库问答 >
问题:

onTextChanged()行为不一致

贺皓
2023-03-14

我编写了下面的代码来弄清楚onTextChanged()方法是如何工作的:

override fun onTextChanged(string: CharSequence?, start: Int, before: Int, count: Int) {
                Log.d(TAG, "onTextChanged triggered.")
                Log.d(TAG, "string = $string")
                Log.d(TAG, "start = $start")
                Log.d(TAG, "before = $before")
                Log.d(TAG, "count = $count")
                Log.d(TAG, "____________________________________________________________")

我注意到:当我只打字时,计数非常简单:

onTextChanged triggered.
string = a
start = 0
before = 0
count = 1
____________________________________________________________
onTextChanged triggered.
string = aa
start = 0
before = 1
count = 2
____________________________________________________________
onTextChanged triggered.
string = aaa
start = 0
before = 2
count = 3
____________________________________________________________
onTextChanged triggered.
string = aaaa
start = 0
before = 3
count = 4
____________________________________________________________
onTextChanged triggered.
string = aaaaa
start = 0
before = 4
count = 5
____________________________________________________________

现在,如果我添加3个(或更多)数字,然后继续键入字母,就会发生以下情况:

onTextChanged triggered.
string = aaaaa2
start = 0
before = 5
count = 6
____________________________________________________________
onTextChanged triggered.
string = aaaaa22
start = 0
before = 6
count = 7
____________________________________________________________
onTextChanged triggered.
string = aaaaa222
start = 0
before = 7     
count = 8
____________________________________________________________
onTextChanged triggered.
string = aaaaa222
start = 0
before = **8**      <---- This is when it gets funny
count = **8**
____________________________________________________________
onTextChanged triggered.
string = aaaaa222a
start = 8
before = 0
count = 1
____________________________________________________________
onTextChanged triggered.
string = aaaaa222aa
start = 9
before = 0
count = 1
 ____________________________________________________________
onTextChanged triggered.
string = aaaaa222aaa
start = 10
before = 0
count = 1
____________________________________________________________
onTextChanged triggered.
string = aaaaa222aaaa
start = 11
before = 0
count = 1
____________________________________________________________
onTextChanged triggered.
string = aaaaa222aaaaa
start = 12
before = 0
count = 1
____________________________________________________________

对我来说,输入3位数字似乎会以某种方式改变TextWatcher的行为,使其将之后的所有内容视为Char而不是CharSequence。

对这种行为有什么解释吗?

共有1个答案

叶淇
2023-03-14

虽然我无法解释为什么会出现3位数的情况,但我发现,根本无法保证报价何时会失效。检查这个这个这个

“由于其他afterTextChanged()方法可能已经进行了其他更改并使偏移量无效,因此不会告诉您更改发生的位置。但是,如果您需要知道这里的情况,可以使用onTextChanged(CharSequence,int,int,int)中的Spannable#setSpan标记您的位置,然后从这里查找范围结束的位置。”

TextWatcher的一个可能的实现就是这个。这样,您将拥有正确的开始和结束索引。

 类似资料:
  • 我实际上正在尝试做卡片格式化,为此我正在尝试实现谷歌从链接所说的 由于其他afterTextChanged()方法可能已经进行了其他更改并使偏移量无效,因此不会告诉您更改发生的位置。但是如果您需要知道这里,可以使用onTextChanged(CharSequence,int,int,int)中的setSpan(Object,int,int,int)来标记您的位置,然后从这里查找span结束的位置。

  • 我有两个DB-DB1和DB2。DB1-“select dbtimezone from dual”返回+00:00。意思是UTC。 这两个表的表描述为created_date列的TIME STAMP和TIMEZONE。这里没有提到当地时区。 对于DB1和DB2中的会话时区,Oracle为什么采用dbtimezone?为什么会有这种不一致?我的目标是用UTC填充DB2中的created_time。

  • 根据这个答案,https://stackoverflow.com/a/12020435/562222,将一个对象分配给另一个对象只是复制引用,但让我们看看以下代码段: 运行它可以提供:

  • 我需要解析一个日期,当我解析一个无效的日期“2007年2月29日”时,它将以dd/MM/yyyy的格式返回给我,作为本地日期2007-02-28,代码如下: 但是,如果我使用ISO格式(没有DateTimeFormatter)进行解析,则会出现异常,代码如下: 例外情况: 所以我的问题是,我想考虑一下: 由于无效,我如何使用LocalDate呢。作语法分析

  • 添加行为(副作用)在流量终止后触发,要么成功完成下游,要么出现错误。 这里有一个简单的例子来再现我面临的问题: 标志简单地说明了在和调用之间的代码可能引发错误。数字1到4表示为了本例的目的,我尝试插入调用的位置,。 null 有人能解释一下上面的事情吗?这是图书馆的故意行为吗? 注意,我使用的是Reactor堆芯3.3.8。

  • 我正在尝试添加一个搜索功能,在这个功能中,每当用户输入文本(一个字母接一个字母)时,网站都会向服务器发送一个收集信息的请求。对于这一点,我需要的是我假设的ContextChanged事件?我尝试过使用它,但活动无法启动。 还有我的代码: 你认为哪里不对?yall是否有比“ContextChanged事件”更好的解决方案来获得每次按键和搜索框?