4

我的应用程序中有一个自动完成功能。如果我开始输入字母自动完成没有时间需要很多时间来处理 JSON 文件。我使用 addTextChangedListener 并且因为这个输入字母不是那么顺利。我想在 JSON 中的搜索数据之前设置一个超时。

Object mObj[] = { dep, arr };
        for (int mI = 0; mI < mObj.length; mI++) {
            ((AutoCompleteTextView) mObj[mI])
                    .addTextChangedListener(new TextWatcher() {

                        public void onTextChanged(final CharSequence s,
                                int start, int before, int count) {
                            setListViewAuto(s, mass);
                        }

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

                        public void afterTextChanged(Editable s) {
                            // TODO Auto-generated method stub
                        }
                    });
        }

UPD: 我这样做:

final Object mObj[] = { dep, arr };
        for (int mI = 0; mI < mObj.length; mI++) {
            ((AutoCompleteTextView) mObj[mI])
                    .addTextChangedListener(new TextWatcher() {

                        private Handler autoHandler = new Handler() {
                            @Override
                            public void handleMessage(Message msg) {
                                if (msg.what == MESSAGE_TEXT_CHANGED) {
                                    String enteredText = (String) msg.obj;
                                    setListViewAuto(enteredText);
                                }
                            }
                        };

                        public  void onTextChanged(final CharSequence s,
                                int start, int before, int count) {
                            massListAuto = new ArrayList<String>(Arrays
                                    .asList(mass));
                            String enteredText = s.toString();
                            autoHandler.removeMessages(MESSAGE_TEXT_CHANGED);
                            final Message msg = Message.obtain(autoHandler,
                                    MESSAGE_TEXT_CHANGED, enteredText);
                            autoHandler.sendMessageDelayed(msg,
                                    AUTOCOMPLETE_DELAY);
                        }

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

                        public void afterTextChanged(Editable s) {
                            // TODO Auto-generated method stub
                        }
                    });
        }

但我收到消息:这个 Handler 类应该是静态的,否则可能会发生泄漏

4

0 回答 0