自动完成文本视图 + JSON服务器要动态获取标签
-
25-10-2019 - |
题
我正在开发一个Android应用程序。我的布局中有一个自动填页。我想用服务器的建议填充此文本视图。服务器上大约有400个关键字,它们将在不久的将来增加,因此我无法一次解析所有标签,然后检查建议。 AutoCompleteTextView应该更像是Google搜索,这样我才能在用户输入某些内容并在UI线程上进行解析时解析。
但是我在这里无法触发该解析器,因为我无法获得该回调方法,也可能是感觉用户已输入某些内容或可能被编辑一些文本的事件。
setonEditorActionListener 仅当用户按软键盘上的Enter按钮时工作。
提前致谢
解决方案
您也可以使用过滤器接口来实现此功能。事实证明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);
其他提示
您可以使用 TextWatcher 每当用户在EditText视图中更改文本时,接口要执行某些操作。只需实现一种或多种TextWatcher的方法,我通常会使用 onTextChanged()
. 。希望有帮助!
不隶属于 StackOverflow