ProgressDialog不显示。再次
问题描述:
我很困惑,因为这对我来说在其他活动中相当不错,在这里我只是基本上复制粘贴了代码,但ProgressDialog不显示。这里的代码:ProgressDialog不显示。再次
public class MyListActivity extends ListActivity {
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.mylayout);
final ProgressDialog progress = new ProgressDialog(this);
progress.setProgressStyle(STYLE_SPINNER);
progress.setIndeterminate(true);
progress.setMessage("Working...");
progress.show();
Thread thread = new Thread()
{
public void run()
{
//long operation populating the listactivity
progress.dismiss();
}
};
thread.run();
}
}
答
不知道这是你的问题的根本原因,但尝试执行thread.start()而不是thread.run()。执行start()实际上会启动一个新线程,并且可能会给进度对话框显示一个机会。
答
您应该使用AsyncTask来管理长操作。
private class LongOperation extends AsyncTask<HttpResponse, Integer, SomeReturnObject>
{
ProgressDialog pd;
long totalSize;
@Override
protected void onPreExecute()
{
pd = new ProgressDialog(this);
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setMessage("Please wait...");
pd.setCancelable(false);
pd.show();
}
@Override
protected SomeReturnObject doInBackground(HttpResponse... arg0)
{
// Do long running operation here
}
@Override
protected void onProgressUpdate(Integer... progress)
{
// If you have a long running process that has a progress
pd.setProgress((int) (progress[0]));
}
@Override
protected void onPostExecute(SomeReturnObject o)
{
pd.dismiss();
}
}
答
从上面的代码,它实际上是显示对话框并立即在Thread run()方法中关闭它。如果你真的想看看它是否显示了一个Thread.sleep(2000)来测试,但是是的,John Russell说的就是改用AsyncTask的方式。