Android 安卓:InputFilter.filter中的参数是什么意思?filter实际上是什么时候调用的?

Android 安卓:InputFilter.filter中的参数是什么意思?filter实际上是什么时候调用的?,android,android-edittext,android-input-filter,Android,Android Edittext,Android Input Filter,我试图理解InputFilter.filter()方法中的六个参数,因此我编写了以下类 final class MyFilter implements InputFilter { static final String TAG = "MyFilter"; @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

我试图理解InputFilter.filter()方法中的六个参数,因此我编写了以下类

final class MyFilter implements InputFilter {

static final String TAG = "MyFilter";

@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
    Log.d(TAG, "source = \"" + source + "\"");
    Log.d(TAG, "start = " + start);
    Log.d(TAG, "end = " + end);
    Log.d(TAG, "dest = \"" + dest + "\"");
    Log.d(TAG, "dstart = " + dstart);
    Log.d(TAG, "dend = " + dend);
    return null;
}}
我在活动中加入了编辑文本,并写道:

editText.setFilters(new InputFilter[] { new MyFilter() });
当我在编辑文本中修改文本时,我得到了一些我根本无法理解的结果

当我写“a”时,filter()被调用一次,参数为“a”、0、1、“、0、0”

当我添加“b”时,它会显示“ab”,filter()会被调用两次,首先是参数 “ab”,0,2,“a”,0,1,然后使用参数“ab”,0,2,“ab”,0,2

当我添加'c'使其显示为“abc”时,filter()只被调用一次,参数为“abc”、0,3、“ab”、0,2

当我添加“d”使其显示为“abcd”时,filter()会被调用两次,第一次调用参数“abcd”,0,4,“abc”,0,3,然后调用参数“abcd”,0,4,“abcd”,0,4

添加后续字符时,每次只调用一次filter()

发生了什么事?为什么长度为2和4的字符串与长度为1、3、5、6、7、8的字符串的处理方式不同

还有,为什么有6个参数,而2个似乎就足够了


提前感谢所有能够解释这一点的人。

您检查过了吗?我检查过了。它没有帮助。
当缓冲区要用源代码范围开始…结束的新文本替换dest的范围dstart…dend时,调用此方法。返回您希望放在那里的CharSequence,如果合适,包括一个空字符串,或者返回null以接受原始替换。注意不要拒绝0长度替换,因为删除文本时会发生这种情况。还要注意的是,您不应尝试从此方法对dest进行任何更改;您只能检查它的上下文。
它解释了6个参数中的每一个参数的用途。您可以解释为什么长度为3的字符串与长度为2和4的字符串的处理方式不同吗?当源字符串和目标字符串看起来相同时,您可以比较filter()回调的源/目标值的范围。它可能是另一个InputFilter或TextWatcher触发更改。