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