Android TextWatcher.after TextChanged vs TextWatcher.onTextChanged

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

55887 次浏览

文本更改后的 public void (可编辑)

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

Public void before TextChanged (CharSequence s,int start,int count,int after)

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

Public void onTextChanged (CharSeries s,int start,int before,int count)

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

就在 Android 对 TextWatcher 的参考台。

这些事件的调用顺序如下:

  1. Before TextChanged (CharSeries s,int start,int count,int after) .
    这意味着字符将被替换为一些新的文本。 < em > 文本是不可编辑的。
    使用: 当你需要查看即将更改的旧文本时。

  2. OnTextChanged (CharSeries s,int start,int before,int count) .
    修改已经完成,一些字符已经被替换。 < em > 文本不可编辑。
    使用: 当您需要查看文本中的哪些字符是新的时候。

  3. 修改后的文本(可编辑的文本)
    和上面一样,除了现在的 文本是可编辑的
    使用: 当您需要查看并可能编辑新文本时

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