控制在TextWatcher for Android中触发事件

时间:2014-01-08 05:33:44

标签: java android event-handling textwatcher

我不得不使用EditTexts重新创建AutoCompleteTextViews的功能(出于不同的原因*&这可能是另一个问题,但我现在正走这条路)。

每当EditText上的文本发生变化时,我都会通过发出api调用来完成所有功能。我这样做是通过使用TextWatcher(覆盖afterTextChanged方法)。

我可以控制一种方式,即使用侦听器触发调用的方式吗?

这是我的用例:

我正在搜索加利福尼亚

我检查一下。长度为3然后开始发射呼叫。所以当前发送的API调用数量= 8

  1. 校准
  2. 卡利
  3. 加利福尼亚
  4. Califor
  5. Californ
  6. 加利福尼亚州
  7. 加利福尼亚
  8. 如果我收到新的文字更改,是否可以取消已解雇的活动?因此,当用户键入加利福尼亚时,我会等到没有输入新文本的间隙,然后激活对我的API的调用?

    它不一定非常准确。这里和那里的额外事件是完全可以接受的。我希望将从8发射的事件数量减少到至少3个。

      

    我想在不同的列表视图中显示自动完成结果,而不是自动完成文本视图旁边的弹出窗口。

1 个答案:

答案 0 :(得分:5)

尝试关注TextWatcher:

TextWatcher t = new TextWatcher() {
        long lastChange = 0;

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

            // TODO Auto-generated method stub
            if (s.length() > 3) {
                new Handler().postDelayed(new Runnable() {
                    public void run() {
                        if (System.currentTimeMillis() - lastChange >= 300) {
                            //send request
                        }
                    }
                }, 300);
                lastChange = System.currentTimeMillis();

            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }
};