ArrayAdapterで動作するAutocompleteTextViewがあります。テキストが変更されると、アダプタはWebサービスから更新されます。この更新は、AsyncTaskで行われます。これは、良い方法であるはずです。これは、押されたすべてのキーの後の提案が、以前押されたキーで取得された文字列に基づいているため、多かれ少なかれ動作しています。 このページはいくつか問題がありますが、私の答えはありません。とにかく、私は解決策を持っていましたが、効率が悪く、「公式の解決策」がなぜ失敗するのか分かりません。ArrayAdapterは、AutoCompleteTextAdapterのWebserviceから遅く更新されます。
キーは、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を設定()どこでも、それは無意味ですしています。