オートコンプリートテキストビュー + JSONサーバーに動的にタグを取得する
-
25-10-2019 - |
質問
Androidアプリケーションを開発しています。レイアウトにautocompleteTextViewがあります。このテキストビューにサーバーからの提案を入力したいと思います。サーバーには約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);
他のヒント
使用できます テキストウォッチャー ユーザーが編集ビューでテキストを変更するたびに何かを行うインターフェイス。テキストウォッチャーのメソッドの1つ以上を実装するだけで、通常使用します onTextChanged()
. 。それが役立つことを願っています!
所属していません StackOverflow