Я знаю, что этот вопрос старый, но мне пришлось сделать то же самое, и я решил, что поделюсь с вами решением, иначе кому-то это понадобится.
Прежде всего, вам действительно нужно будет использовать AsyncTask
для извлечения ваших данных. При этом я никогда не позволю AsyncTask каким-либо образом манипулировать моим классом представления. Вместо этого я бы предпочел использовать callback , передаваемый вместе с параметрами, которые вам нужны в 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();
}
}