ArrayAdapter で動作する AutocompleteTextView があります。テキストが変更されると、アダプターは Web サービスから更新されます。この更新は AsyncTask で行われますが、これは良い習慣です。キーが押されるたびに提案が前に押されたキーで取得された文字列に基づいているため、これは多かれ少なかれ機能しています。このページに関連する問題がいくつかありますが、どれもうまくいきません。とにかく、解決策はありましたが、非効率的であり、「公式の解決策」が失敗する理由がわかりません。
バックグラウンドで ArrayAdapter を更新する機能に鍵があると思います。これは、Web サービスへの非同期呼び出しで行うことです。
private class DoAutoCompleteSearch extends AsyncTask<String, Void, Map<String, String>> {
@Override
protected Map<String, String> doInBackground(String... params) {
// Ask the webservice for data
Map<String, String> autoComplete = GetResource.dataList(params[0]);
return autoComplete;
}
@Override
protected void onPostExecute(Map<String, String> result) {
//mAutoCompleteAdapter.clear(); * This should work but does not *
/* If it is set a new adapter in the AutoCompleteTextView, the whole thing works properly */
mAutoCompleteAdapter = new ArrayAdapter<String>(mAutoCompleteAdapter.getContext(), android.R.layout.simple_dropdown_item_1line);
mACTV.setAdapter(mAutoCompleteAdapter);
for (Map.Entry<String, String> entry : result.entrySet()) {
mAutoCompleteAdapter.add(entry.getKey());
}
}
}
私は mAutoCompleteAdapter.clear() を試し、どこでも mAutoCompleteAdapter.notifyDataSetChanged() を設定しましたが、役に立ちません。