首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓TextWatcher.afterTextChanged vs TextWatcher.onTextChanged

安卓TextWatcher.afterTextChanged vs TextWatcher.onTextChanged
EN

Stack Overflow用户
提问于 2009-01-24 23:03:31
回答 3查看 54.3K关注 0票数 127

在什么情况下,我应该使用afterTextChanged而不是onTextChanged,反之亦然?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-15 02:03:57

这些事件按以下顺序调用:

  1. beforeTextChanged(CharSequence s,int开始,int count,int after)

这意味着这些字符将被一些新文本替换。文本不可编辑。

用法:当你需要查看即将开始的旧文本时,可以使用int change.

  • onTextChanged(CharSequence,int need,int count)

已经做了更改,一些字符刚刚被替换。文本不可编辑。

使用:当您需要查看文本中的哪些字符是new.

  • afterTextChanged(Editable s)时。

与上面相同,除了现在文本是可编辑的。

使用:当您需要查看或可能编辑新文本时。

如果我只是在监听EditText中的变化,我根本不需要使用前两个方法。我将只在第三个方法中接收新值,并在需要时更正新文本。但是,如果我必须追踪值发生的确切变化,我将使用前两种方法。如果我还需要在监听更改后编辑文本,我会使用第三种方法。

票数 208
EN

Stack Overflow用户

发布于 2009-01-24 23:19:22

公共空afterTextChanged(可编辑的% s)

调用此方法是为了通知您,在s中的某个地方,文本已被更改。从这个回调中对s进行进一步的更改是合法的,但是要小心不要陷入无限循环,因为您所做的任何更改都会导致此方法再次被递归调用。(您不会被告知更改发生在何处,因为其他afterTextChanged()方法可能已经进行了其他更改并使偏移量无效。但是如果你需要知道这里,你可以使用onTextChanged(CharSequence, int, int, int)中的setSpan(Object, int, int, int)来标记你的位置,然后从这里查找跨度结束的地方。

public void (CharSequence s,int start,int count,int after)

调用此方法是为了通知您,在s中,以start开头的count字符即将被长度为after的新文本替换。尝试从此回调更改s是错误的。

public void (CharSequence s,int start,int before,int count)

调用此方法是为了通知您,在s中,以start开头的count字符刚刚替换了长度为before的旧文本。尝试从此回调更改s是错误的。

Android's Reference for TextWatcher发来的。

票数 12
EN

Stack Overflow用户

发布于 2015-06-05 17:55:25

是一种触发器,它在输入字段的文本变化时被调用。

-此方法在文本更改时调用。因为您所做的任何更改都会导致此方法再次被递归调用,所以在这里执行操作时必须格外小心,否则可能会导致无限循环。

-调用此方法是为了通知您,在s内,开始于开始的字符计数刚刚替换了之前具有长度的旧文本。尝试从此回调对%s进行更改是错误的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/476848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档