Я использую TabActivity
с 4 отдельными Activities
- по одному на каждую вкладку.
Один из Activities
- это ListView
, который имеет пользовательский ArrayAdapter
.
Проблема в том, что когда я нажимаю клавишу Tab для перехода к этому представлению, Activity
загружает содержимое до изменения представления, это выглядит так, как будто ничего не происходит в течение пары секунд, пока не будет загружена xml
и разобрали и т. д.
Я искал пример, но это мое первое приложение для Android, и у меня возникают трудности с пониманием потока.
Может ли кто-нибудь указать мне какой-нибудь код, который позволит мне мгновенно изменить представление (я могу сообщить, что пользовательский контент загружается) при загрузке контента в фоновом потоке
спасибо
РЕДАКТИРОВАТЬ - я портирую код из существующего приложения для iOS - я не смог лучше сформулировать проблему, так как не понимал, как поток пользовательского интерфейса может быть заблокирован в этой ситуации, и из-за сложности существующий код и сроки я не хотел слишком сильно менять структуру.
Я сузил проблему до того, как увидел твой код, Дженнифер, но это решение я использовал, так что я отмечу твой как правильный.
вот что я использовал, если кому-то это поможет, мне пришлось поместить вызванную функцию, чтобы инициировать загрузку данных в фоновый поток, а затем отобразить содержимое, когда этот поток выполнил свою работу
Этот класс был объявлен в моем
public class TableView extends ListActivity
Мне было трудно обдумать то, чего я раньше не делал;)
public class GetContentTask extends AsyncTask<Void, Void, Void> {
private ProgressDialog pdialog;
@Override
protected void onPreExecute(){
super.onPreExecute();
pdialog = new ProgressDialog(TableView.this);
pdialog.setTitle(progressDialogTitle);
pdialog.setMessage(progressDialogMessage);
pdialog.show();
}
@Override
protected void onPostExecute(Void result){
super.onPostExecute(result);
setUpAndLoadList(); // the function to display the list and fill it with content
pdialog.dismiss();
}
@Override
protected Void doInBackground(Void... params) {
doInitialLoad(); // The function to load any xml data from server
return null;
}
}