我的Activity中有一个MultiAutoCompleteTextView
窗口小部件,其ArrayAdapter<String>
由基于网络的调用结果填充。当用户在textview中键入字符时,此适配器的列表应在后台更新。实现这个的最佳方法是什么?
我已经尝试使用AsyncTask
在后台下载字符串列表,但是notifyDataSetChanged()
是从“非原始线程”调用的。而且,这似乎有点迂回。
我遇到的另一个选项是可以使用Filterable
,但我没有遇到任何关于如何执行此操作的简单示例(AutoComplete4似乎有点矫枉过正)。如果没有例子,有人可以对我需要的演员进行广泛的概述 - 过滤,过滤等。
这也是一个好方法吗?
谢谢,
Rajath
答案 0 :(得分:0)
我知道这个问题很老,但我必须做同样的事情,我想我会和你分享解决方案,或者任何人都需要它。
首先,您确实需要使用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();
}
}