我正在开发一个应用程序,它基本上会在应用程序本身的开始处下载大量数据,并将其显示在ListActivity中。我打算做的是显示一个启动屏幕,直到加载数据。
到现在为止,我所有的尝试都是徒劳的。我尝试了anddev.org提到的方法,但是我的问题是主要的Activity应该开始,但是在我填充ListActivity之前,初始屏幕应该是可见的。简而言之,我必须执行以下步骤:
希望你了解它的样子。
问题很可能是您在完成所有工作的同一线程中运行启动屏幕(某种对话框,例如我假设的ProgressDialog)。这将使初始屏幕的视图不会被更新,甚至可以使其不显示在屏幕上。您需要显示初始屏幕,启动AsyncTask实例以下载所有数据,然后在任务完成后隐藏初始屏幕。
因此,您Activity的onCreate()方法将只创建一个ProgressDialog并显示它。然后创建AsyncTask并启动它。我将AsyncTask设置为主活动的内部类,以便它可以将已下载的数据存储到活动中的某个变量中,并在其onPostExecute()方法中关闭ProgressDialog。
不知道如何仅在不显示代码的情况下进行详细说明,所以这里是:
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)目前)。