android - 将文本从ListView复制到EditText后,EditText的TextWatcher停止运行良好

时间:2015-01-19 23:52:24

标签: android

我有一个名为mSearchEdit的TextView。

我添加了一个TextWatcher,如果mSearchEdit发生了变化,它会在parse.com服务器中查找是否存在ParseObject"产品"那是feild" productName"包含文本。如果有,则返回3个ParseObject" Products",并在ListView中显示它的名称。如果用户按下其中一个ListView项,则会将mSearchEdit的文本更改为该项。

它有效,但有一个错误:

如果用户选择了一个项目(将项目文本放在mSearchEdit中),然后更改mSearchEdit中的文本,则应用程序继续运行,但没有对没有文本的parse.com进行查询。当我调试它时,我可以看到,在这种情况下,它进入" onTextChanged"函数,但它在函数中运行的最后一行是:

query.whereContains("productName", searchRegexText);

这是代码:

mSearchEdit.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            //textWatcher = this;
            String searchRegexText = mSearchEdit.getText().toString();
            ParseQuery<ParseObject> query = ParseQuery.getQuery("Products");
            query.whereContains("productName", searchRegexText);
            query.setLimit(3);
            query.findInBackground(new FindCallback<ParseObject>() {
                @Override
                public void done(List<ParseObject> list, ParseException e) {
                    List<String> offers = new ArrayList<String>();
                    for (int i = 0; i< list.size();i++) {
                        offers.add((String)(list.get(i)).get("productName"));
                    }

                    ArrayAdapter<String> adapter =
                            new ArrayAdapter<String>(context,
                                    R.layout.text1,
                                    android.R.id.text1,
                                    offers);
                    listview.setAdapter(adapter);

                    listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                        @Override
                        public void onItemClick(AdapterView<?> parent, final View view,
                                                int position, long id) {
                            final String item = (String) parent.getItemAtPosition(position);
                            if (!mSearchEdit.getText().equals(item)){
                                mSearchEdit.setText(item);
                            }
                            listview.setVisibility(View.INVISIBLE);
                        }
                });

                }

            });
        }

        @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

        }
    });

0 个答案:

没有答案