的EditText&TextChangeListener(EditText & TextChange

2019-07-29 17:47发布

我需要你的帮助。 我的EditText领域,其作为搜索字段列表中的搜索思想的许多项目。 现在,我使用afterTextChanged(编辑S)TextWatcher的方法,但它并不适合我。 一些次后快速输入和擦除下一个搜索过程中涉及到不被用户inputed所有文本。 原因是长期在搜索过程中,我不能把它缩短了。 在我来说,我需要知道,wnen用户结束他的投入在所有,但afterTextChanged()处理每一个符号改变。 我欢迎任何想法。 谢谢!

Answer 1:

我猜您使用的是TextWatcher因为你想从现场搜索。 在这种情况下,你可以不知道什么时候用户完成输入,但你可以限制你搜索的频率。

下面是一些示例代码:

searchInput.addTextChangedListener(new TextWatcher()
{
    Handler handler = new Handler();
    Runnable delayedAction = null;

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

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

    @Override
    public void afterTextChanged( final Editable s)
    {
        //cancel the previous search if any
        if (delayedAction != null)
        {
            handler.removeCallbacks(delayedAction);
        }

        //define a new search
        delayedAction = new Runnable()
        {
            @Override
            public void run()
            {
                //start your search
                startSearch(s.toString());
            }
        };

        //delay this new search by one second
        handler.postDelayed(delayedAction, 1000);
    }
});

要知道只有这样,如果输入已经结束是用户按Enter键或搜索按钮什么的。 你可以听下面的代码是事件:

searchInput.setOnEditorActionListener(new OnEditorActionListener()
{

    @Override
    public boolean onEditorAction( TextView v, int actionId, KeyEvent event)
    {
        switch (actionId)
        {
        case EditorInfo.IME_ACTION_SEARCH:
            //get the input string and start the search
            String searchString = v.getText().toString();
            startSearch(searchString);
            break;
        default:
            break;
        }
        return false;
    }
});

只要确保添加android:imeOptions="actionSearch"EditText的布局文件。



Answer 2:

你需要的是TextWatcher

http://developer.android.com/reference/android/text/TextWatcher.html



Answer 3:

如何我通常做的是使用onFocusChange

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (!hasFocus) {
            // Do your thing here
        }
    }
});

这具有以移动虽然从现场的EditText远离用户的一个缺点,所以我不知道这是否会适合与你正在试图做...



文章来源: EditText & TextChangeListener