您正在反对
AutoCompleTextView工作原理。当用户开始在输入框中输入字符时,
AutoCompleteTextView将过滤适配器,并且在发生这种情况时,它将显示下拉列表,其中包含设法通过过滤器请求的值。现在,您已经将设置为
AutoCompleteTextView在用户每次输入字符时都创建一个线程,问题在于,
AutoCompleteTextview在适配器实际填充正确的值之前,它将永远不会看到这些值,因为它要求适配器进行过滤。尝试这样的事情:
public static class BlockingAutoCompleteTextView extends AutoCompleteTextView { public BlockingAutoCompleteTextView(Context context) { super(context); } @Override protected void performFiltering(CharSequence text, int keyCode) { // nothing, block the default auto complete behavior }}
并获取数据:
public void onTextChanged(CharSequence s, int start, int before, int count) { if (autoComplete.getThreashold() < s.length()) { return; } queryWebService();}
您需要使用主UI线程并使用适配器的方法来更新数据:
// do the http requests you have in the queryWebService method and when it's time to update the data:runonUiThread(new Runnable() { @Override public void run() { autoCompleteAdapter.clear(); // add the data for (int i = 0; i < length; i++) { // do json stuff and add the data autoCompleteAdapter.add(theNewItem); } // trigger a filter on the AutoCompleteTextView to show the popup with the results autoCompleteAdapter.getFilter().filter(s, autoComplete); }});
查看上面的代码是否有效。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)