使用带有ListActivity的AsyncTask显示加载屏幕

时间:2012-03-15 22:14:39

标签: android listview android-asynctask listactivity

我有一个使用ListActivity为用户提供操作列表的应用。当他们点击一个时,我使用Intent启动一个单独的活动。

我的问题是,应用程序执行的操作大约需要20秒才能完成,而且由于我不希望用户收到那个令人讨厌的ANR对话框,我尝试使用AsyncTask向他们展示同时加载屏幕。我尝试在setContentView(R.layout.loading);上使用onPreExecute(),但它会抛出一个NullPointerException,据我所知,这是因为loading.xml不是“一个ID为{{1的ListView” }}”。

那我现在该怎么办?如何显示加载屏幕?有没有办法解决这个非常烦人的情况?任何帮助将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:1)

我不确定你的用例是什么;你有一个立即填充的项目列表,一旦选择了一个动作?采取的行动是启动另一个执行后台处理的活动?

或者填充行动清单需要很长时间吗?

如果是前者,你可以使用AsyncTask作为长时间运行的活动而不是Intent来启动另一个Activity:在回调中你得到点击有问题的项目,你将创建AsyncTask,并在doInBackground中您将执行长时间运行的活动,并在必要时使用onPostExecute刷新或操作列表。

另一件需要考虑的事情是使用一个对话框来显示加载屏幕,如果在启动新活动之前需要加载。

如果您可以进一步描述您的用例,我可以为您提供更多帮助。

答案 1 :(得分:0)

这不是你需要在AsyncTask上加载的屏幕,而是20秒的Activity初始化。我会寻找一种方法在服务的后台线程中进行所有设置,同时用户可以自由地在其他活动中快速浏览。我会努力找到一种方法,不要让用户停顿20秒。也许将它们带到目标Activity并显示它们从上次访问中缓存的数据,直到新的设置准备就绪。

答案 2 :(得分:0)

在正在调用的Activity的onCreate()中启动并显示加载对话框,然后在AsyncTask的onPostExecute()中调用Dialog.dismiss()。