我正在开发一个Android应用程序。我的布局中有一个autocompleteTextView。我想用我服务器的建议填充这个textView。服务器上有大约400个关键字,它们会在不久的将来增加,因此我无法一次解析所有标签,然后检查建议。 autocompleteTextView应该像google搜索一样工作,所以我只在用户输入内容并且在UI线程上进行解析时解析。
但我在这里无法触发该解析器,因为我无法获得该回调方法,或者可能是感知用户输入了某些内容或可能编辑某些文本的事件。
setOnEditorActionListener 仅在用户按下软键盘上的enter按钮时有效。
提前致谢
答案 0 :(得分:3)
您也可以使用Filter接口来实现此功能。事实证明,Filter.performFiltering()仅在此类目的的情况下从UI线程调用。以下是我用来执行此操作的一些代码:
Filter filter = new Filter() {
@Override
public CharSequence convertResultToString(Object resultValue) {
return resultValue.toString();
}
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
if( charSequence == null ) return null;
try {
// This call hits the server with the name I'm looking for and parses the JSON returned for the first 25 results
PagedResult results = searchByName( charSequence.toString(), 1, 25, true);
FilterResults filterResults = new FilterResults();
filterResults.values = results.getResults();
filterResults.count = results.getResults().size();
return filterResults;
} catch (JSONException e) {
return new FilterResults();
}
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
if( filterResults != null ) {
adapter.clear();
adapter.addAll( (List<MyObject>)filterResults.values );
}
}
};
然后使用过滤器:
private AutoCompleteTextView beverageName;
...
beverageName = findViewById( R.id.beverageName );
ListAdapter adapter = ...
adapter.setFilter(filter);
beverageName.setAdapter(adapter);
答案 1 :(得分:0)
只要用户在EditText视图中更改文本,您就可以使用TextWatcher界面执行某些操作。只需实现一个或多个TextWatcher方法,我通常使用onTextChanged()
。希望有所帮助!