Лучший способ сделать это - создать экземпляр AsyncTask в методах onResume() или onCreate(). Затем в методе doInBackground класса AsyncTask вы можете загрузить данные, необходимые для listView в некотором массиве. Finnaly, в onPostExecute() вы должны создать экземпляр своего адаптера с данными, которые у вас есть в массиве, а затем назначить его в listView. Что-то вроде этого:
ProgressDialog pd;
ArrayAdapter<String> adapter;
ArrayList<String> dataStrings;
@Override
public void onResume() {
dataStrings = new ArrayList<String>();
pd = new ProgressDialog(context);
new MyAsyncTask().execute(params);
}
public class MyAsyncTask extends AsyncTask<String, Boolean, ArrayList<String>> {
@Override
protected void onPreExecute()
{
pd = new ProgressDialog(context);
pd.setTitle(EsCache.instance.getLangItem("LABEL_PLEASE_WAIT"));
pd.setMessage(EsCache.instance.getLangItem("LABEL_LOADING_DATA"));
pd.setCancelable(true);
pd.show();
}
@Override
protected ArrayList<String> doInBackground(String... params) {
// TODO Auto-generated method stub
dataStrings = SomeMethodGetData(); // returns data and stores it in list
return dataStrings;
}
@Override
protected void onPostExecute(ArrayList<String> list) {
adapter = new ArrayAdapter<String>(context,
android.R.layout.simple_list_item_1, dataStrings);
listView.setAdapter(adapter);
pd.dismiss();
}
}
Это просто самый простой демонстрацией, но она получает работу, он не сильно отличается, если вы используете какой-то пользовательский адаптер. Вы должны быть осторожны, хотя вы не смешиваете что-то и пытаетесь изменить что-то, что связано с пользовательским интерфейсом от doInBackground() :) Я надеюсь, что это вам поможет.
Вместо этого используйте вместо этого погрузчики. – dymmeh
Это не будет поддерживать в версии 2.2 справа? – MidhunVP
Будет. Вы должны использовать библиотеку поддержки для этого. – dymmeh