addTextChangedListener onTextChanged算不工作android版10

问题描述

我用addTextChangedListener从服务器与改型搜索项。但只有Android版本10 onTextChanged算不工作...?

这是我的代码

searchEdit.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s,int start,int count,int after) {
        }
        @Override
        public void onTextChanged(CharSequence s,int before,int count) {

            if (count>1) {
                String name = searchEdit.getText().toString().trim();

                if (!name.isEmpty()) {
                    searchItemByName(name);
                }
            }
        }
        @Override
        public void afterTextChanged(Editable s) {
            
        }
    });

解决方法

我假设您在 count 回调中使用 onTextChanged 参数作为 searchEdit Edittext 中的字符数。

解决方案: 您需要使用 s.length() 函数而不是参数 count,如下所示:

searchEdit.addTextChangedListener(new TextWatcher() {

            @Override
            public void beforeTextChanged(CharSequence s,int start,int count,int after) {
            }

            @Override
            public void onTextChanged(CharSequence s,int before,int count) {

                if (s.length()>1) {
                    String name = searchEdit.getText().toString().trim();

                    if (!name.isEmpty()) {
                        searchItemByName(name);
                    }
                }
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

说明:

如果您查看以下 android.text.TextWatcher::onTextChanged 函数的文档:

/**
     * This method is called to notify you that,within <code>s</code>,* the <code>count</code> characters beginning at <code>start</code>
     * have just replaced old text that had length <code>before</code>.
     * It is an error to attempt to make changes to <code>s</code> from
     * this callback.
     */
    public void onTextChanged(CharSequence s,int count);

它说 count 参数指的是 s 中更改的字符数,因此,如果您在编辑文本中输入,您的 onTextChanged 函数将使用参数调用count 为 1。

或者:您可以将 afterTextChanged 回调与 s.length() 一起使用。