我的Activity中有一个MultiAutoCompleteTextView小部件,它有一个ArrayAdapter< String>由基于Web的呼叫的结果填充.当用户在textview中键入字符时,此适配器的列表应在后台更新.实现这个的最佳方法是什么?
我已经尝试使用AsyncTask在后台下载字符串列表,但是从“非原始线程”调用了notifyDataSetChanged().而且,这似乎有点迂回.
我遇到的另一个选择是可以使用Filterable,但我没有遇到任何关于如何执行此操作的简单示例(AutoComplete4似乎有点矫枉过正).如果没有例子,有人可以对我需要的演员进行广泛的概述 – 过滤,过滤等.
这也是一个好方法吗?
谢谢,
Rajath
解决方法
我知道这个问题很老,但我必须做同样的事情,我想我会与你分享解决方案,或者任何人都需要它.
首先,您确实需要使用AsyncTask来检索数据.这就是说,我永远不会让AsyncTask以任何方式操纵我的视图类.相反,我宁愿使用与AsyncTask中所需参数一起传递的回调. AsyncTask完成后,您将调用您的回调方法,该方法将负责调用notifyDataSetChanged().
这是一些代码:
MyAsyncTask.java
public class MyAsyncTask extends AsyncTask<Object,Void,Object> { @Override protected String doInBackground(Object... params) { MyController callbackClass = (MyController) params[0]; // Get your other parameters and do your stuff here... // Call the setter with the data you get back and refresh the view // either here or implementing onPostExecute. callbackClass.setMyData(myData); callbackClass.refreshView(); // Return any object if you need. return null; } }
MyCallbackClass.java
public MyCallbackClass extends Fragment{ private List<MyDataType> myData; private ArrayAdapter<MyDataType> myAdapter; // Your methods including setters and getters. public void refreshFriendList(){ if(myAdapter == null){ initAutoCompleteView(); } myAdapter.clear(); myAdapter.addAll(myData); myAdapter.notifyDataSetChanged(); } }