ネットワーク呼び出しはFilter.performFiltering
メソッド内で実行されます。
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if (constraint != null) {
// Retrieve the autocomplete results.
resultList = autocomplete(constraint.toString());
// Assign the data to the FilterResults
filterResults.values = resultList;
filterResults.count = resultList.size();
}
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
notifyDataSetChanged();
}
else {
notifyDataSetInvalidated();
}
}};
return filter;
}
ドキュメントからわかるように、Filter.performFiltering()
メソッドはワーカー スレッド内で実行されます。
ワーカー スレッドで呼び出され、制約に従ってデータをフィルター処理します。フィルタリング操作を実行するには、サブクラスでこのメソッドを実装する必要があります。フィルタリング操作によって計算された結果は、 として返される必要があります。Filter.FilterResults
これは、 を介して UI スレッドでパブリッシュされますpublishResults(CharSequence,
android.widget.Filter.FilterResults)
。