我有一个名为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
}
});