当前位置: 首页 > 知识库问答 >
问题:

编辑文本集选择清除文本,然后重新输入

田念
2023-03-14

我一直有一些来自EditText的奇怪行为的问题。setSelect,我希望你们都能帮忙!

我正在开发的应用程序有一个搜索字段,需要让它的行为非常类似于浏览器的搜索栏。例如,如果用户键入“fo ”,我们希望EditText自动完成“foobar ”,并突出显示自动完成的“obar”文本,以便在自动完成的文本与用户想要键入的内容不匹配时,用户可以很容易地替换它。

为了实现这一点,我设置了一个带有TextWatcher的EditText字段,尝试在TextChanged后自动完成文本。以下是我的代码:

    editText.addTextChangedListener(new TextWatcher() {
        int lastCount = 0;

        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        }

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

        }

        @Override
        public void afterTextChanged(Editable editable) {
            editText.removeTextChangedListener(this);
            String searchString = editable.toString();
            if (editable.length() > lastCount) {
                lastCount = editable.length();
                int oldLength = searchString.length();
                String autoFillResult = completeAutofill(searchString);
                if (!autoFillResult.equals("")) {
                    searchString = autoFillResult;
                    editable.clear();
                    editable.append(autoFillResult);
                    editText.setSelection(oldLength, autoFillResult.length());
                }

            } else lastCount = editable.length();

            editText.addTextChangedListener(this);
        }
    });

我的问题如下。使用前面的“Foobar”案例:

>

  • 用户键入“F”,EditText会自动填充“oobar”并突出显示它。

    然后用户键入第一个“o”

    EditText字段被暂时清除(即,afterTextChanged接收一个带有空字符串的可编辑的)

    编辑文本正确地自动填充到用户提供的“Fo ”,后跟高亮显示的自动完成的“obar”。

    问题是当用户键入下一个字符时,EditText会被清除,然后重新填充,这在EditText字段中造成了明显的干扰。有趣的是,我挑出了editText.setSelection(oldLlong,autoFillResult.length());作为罪魁祸首(即注释该行消除了问题,但显然它的功能是错误的)。

    在完成一些谷歌研究和我自己的调试后,我仍然不确定为什么会发生这种情况。这个问题似乎并不太常见,因为我在谷歌上找不到它,我也无法在自己的实验中找出这个问题的原因。

    提前谢谢你!

  • 共有2个答案

    百里涛
    2023-03-14

    请尝试移除< code > editable . clear();

    曾实
    2023-03-14

    < code>if条件可能是:

    autoFillResult != null && !autoFillResult.equals("")
    

    当您可能正在寻找(或尝试重新创建)自动完成文本视图时。

     类似资料:
    • 我正在尝试实现一个编辑文本,将输入限制为仅 Alpha 字符 [A-Za-z]。 我从本文中的InputFilter方法开始。当我键入“a%”时,文本消失,如果我按退格键,文本为“a”。我尝试过过滤器函数的其他变体,比如使用正则表达式只匹配[a-Za-z],有时会看到疯狂的行为,比如重复字符,我会键入“a”,然后键入“b”,再键入“aab”,然后再键入“c”,再得到“aabaabc”,然后按退格键

    • 问题内容: 我找不到答案的简单问题:如何使用JavaScript(或jQuery)取消选择可能在网页上选择的任何文本?EG用户单击并拖动以突出显示一些文本- 我想要一个函数deselectAll()来清除此选择。我应该怎么写呢? 谢谢您的帮助。 问题答案:

    • 我正在开发一个Android聊天应用程序。一切运作良好,但除了一件事;我想设置一个布局的可见性消失,然后设置一个不同的布局可见时,用户开始输入编辑文本,就像在WhatsApp上实现的。但是我似乎想不明白。任何帮助都将不胜感激 基本上,我想做的是设置一个布局的可见性,该布局包含一个图像按钮,用于将图像上载到gone,然后显示一个布局,该布局包含一个图像按钮,用于在用户开始键入时将edittext中的

    • 我在我的文件中有这个代码,但是当在编辑文本中键入任何值并按下按钮时,相关的字符串不会打印。如何使其在按下按钮时,根据在编辑文本槽中输入的字符串显示特定文本?

    • 如何继续删除char从编辑文本后settext编辑文本当按钮删除keybord是坚持真? 谢啦

    • 到目前为止,我们介绍了一些用于在文件中移动和选择区域的方法,现在让我们真正来修改一些文本吧。很显然你可以通过打字的方式来输入字符,但是有另一些方法使删除和处理字符变得更简捷易用。 基本操作 有一些用于基本操作的很酷的快捷键,他们十分易用。这些操作包括整行移动文本,整行复制,以及改变大小写。 ctrl-T 交换光标两边字符的位置 cmd-J 将下一行拼接到当前行的末尾 ctrl-cmd-up, ct