Я разрабатываю приложение, которое в основном загружает много данных в начале самого приложения и отображает его в ListActivity. То, что я планирую сделать, показать Экран-заставку, пока данные не загружаются.
До настоящего времени все мои попытки были бесполезны. Я попробовал anddev.org, упомянул методы, но моя проблема состоит в том, что основной вид деятельности должен запуститься, но Экран-заставка должен быть видим, пока я не заполняю свой ListActivity. Так короче говоря я должен пройти следующие шаги:
Надежда Вы понимаете то, на что она похожа....
Скорее всего, проблема в том, что заставка (некая Dialog, как я предполагаю, ProgressDialog) запущена в том же потоке, что и вся выполняемая работа. Это не позволит обновить вид заставки, что может помешать даже ее отображению на экране. Нужно отобразить заставку, запустить экземпляр AsyncTask, чтобы пойти загрузить все данные, затем скрыть заставку после выполнения задания.
Таким образом, ваш метод Activity's onCreate() просто создаст ProgressDialog и покажет его. Затем создайте AsyncTask и запустите его. Я бы сделал AsyncTask внутренним классом вашей основной Activity, чтобы он мог хранить данные, загруженные в какую-нибудь переменную в вашей Activity, и закрыть ProgressDialog в своем методе onPostExecute().
Не уверен, что теперь можно разрабатывать, не показывая код, так что вот:
public class MyActivity extends Activity {
private ProgressDialog pd = null;
private Object data = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Show the ProgressDialog on this thread
this.pd = ProgressDialog.show(this, "Working..", "Downloading Data...", true, false);
// Start a new thread that will download all the data
new DownloadTask().execute("Any parameters my download task needs here");
}
private class DownloadTask extends AsyncTask<String, Void, Object> {
protected Object doInBackground(String... args) {
Log.i("MyApp", "Background thread starting");
// This is where you would do all the work of downloading your data
return "replace this with your data object";
}
protected void onPostExecute(Object result) {
// Pass the result data back to the main activity
MyActivity.this.data = result;
if (MyActivity.this.pd != null) {
MyActivity.this.pd.dismiss();
}
}
}
}
Очевидно, что там есть несколько кусочков, которые нужно заполнить, но этот код должен запуститься и дать вам хорошую отправную точку (простите, если произошла ошибка в коде, у меня нет доступа к Android SDK, так как я набираю его в данный момент).
Еще несколько хороших статей на тему AsyncTasks в Android можно найти здесь и здесь .
.