当前位置:  开发笔记 > Android > 正文

Android TextWatcher.afterTextChanged与TextWatcher.onTextChanged

如何解决《AndroidTextWatcher.afterTextChanged与TextWatcher.onTextChanged》经验,为你挑选了2个好方法。

在什么情况下我应该使用afterTextChanged而不是onTextChanged反之亦然?例子将是最有启发性,注重为什么afterTextChanged必须重写,但onTextChangedafterTextChanged没有被覆盖.



1> Malcolm..:

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

    beforeTextChanged(CharSequence s,int start,int count,int after).
    这意味着字符即将被一些新文本替换.该文本是不可编辑的.
    使用:当您需要查看即将更改的旧文本时.

    onTextChanged(CharSequence s,int start,int before,int count).
    已经进行了更改,一些字符已被替换.该文本是不可编辑的.
    使用:当您需要查看文本中的哪些字符是新的时.

    afterTextChanged(可编辑的).
    与上面相同,除了现在文本是可编辑的.
    使用:当您需要查看并可能编辑新文本时.

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



2> GregD..:

public void afterTextChanged(可编辑的s)

调用此方法是为了通知您,s文本中的某个位置已更改.s从这个回调中进行进一步的更改是合理的,但要注意不要让自己陷入无限循环,因为你所做的任何更改都会导致以递归方式再次调用此方法.(你是不是说当变化发生,因为其他afterTextChanged()方法可能已经做了修改和无效的偏移量.但是,如果你需要知道这里,你可以使用setSpan(Object, int, int, int)onTextChanged(CharSequence, int, int, int)标记你的地方,然后从这里那里仰望跨度结束了.

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

调用此方法是为了通知您,在开头scount字符内,start即将由具有长度的新文本替换after.尝试s从此回调进行更改是错误的.

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

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

直接来自Android的TextWatcher参考.

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有