如何在 Android 中开始活动之前显示进度对话框?
Posted
技术标签:
【中文标题】如何在 Android 中开始活动之前显示进度对话框?【英文标题】:How to display progress dialog before starting an activity in Android? 【发布时间】:2011-07-09 07:10:14 【问题描述】:如何在 android 中启动 Activity 之前(即,当 Activity 正在加载一些数据时)显示进度对话框?
【问题讨论】:
你应该删除你的问题之前的空格......它被作为代码块拾取并使你的问题更难阅读。 【参考方案1】:您应该在AsyncTask 中加载数据,并在数据加载完成后更新您的界面。
您甚至可以在 AsyncTask 的 onPostExecute()
方法中启动一个新活动。
更具体地说,您将需要一个扩展 AsyncTask 的新类:
public class MyTask extends AsyncTask<Void, Void, Void>
public MyTask(ProgressDialog progress)
this.progress = progress;
public void onPreExecute()
progress.show();
public void doInBackground(Void... unused)
... do your loading here ...
public void onPostExecute(Void unused)
progress.dismiss();
那么在你的活动中你会做:
ProgressDialog progress = new ProgressDialog(this);
progress.setMessage("Loading...");
new MyTask(progress).execute();
【讨论】:
嘿,谢谢你的回答,我就是这样做的,但是由于某种原因,当手机处于横向而不是纵向时,progressDialog 会弹出。你对此有什么想法吗?我已经尝试从第一堂课(调用 myTask 的那个)开始对话框,但仍然是同样的问题。有时,对话框在纵向模式下工作,但看起来没有焦点,这种情况在 10 次尝试中只会发生一次。【参考方案2】:当您在 Android 上启动一个长时间运行的进程时,始终建议您在另一个线程上执行此操作。然后,您可以使用 UI 线程来显示进度对话框。您不能在进程正在运行的同一 (UI) 线程中显示进度对话框。
执行以下操作以开始您的流程
pd = ProgressDialog.show(this, "Synchronizing data", "Please wait...");
Thread t = new Thread(this);
t.start();
为此,您的活动应按如下方式实现 Runnable
public class SyncDataActivity extends Activity implements Runnable
最后是一种执行长时间运行过程的方法
@Override
public void run()
//your code here
【讨论】:
如果您使用线程,您必须管理各种事情,例如在 UI 线程上执行任务后代码。 Matthew... 你能在 AsyncTask 中将 Daemon 设置为 true 吗? 嗨,我按照你们所说的尝试过,但仍然无法正常工作。我在下面发布我的代码。谁能告诉我做错了什么? public class Startup extends Activity implements Runnable private ProgressDialog pd @Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);设置内容视图(R.layout.startup);新的 MyTask(pd).execute(); 私有类 MyTask 扩展 AsyncTask以上是关于如何在 Android 中开始活动之前显示进度对话框?的主要内容,如果未能解决你的问题,请参考以下文章