我很困惑,因为这在我的其他活动中一直很好用,在这里我只是基本上复制粘贴代码,但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();
}
}
答案 0 :(得分:1)
不确定这是否是问题的根本原因,但尝试执行thread.start()而不是thread.run()。执行start()实际上将启动一个新线程,并可能给进度对话框一个展示的机会。
答案 1 :(得分:0)
您应该使用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();
}
}
答案 2 :(得分:0)
从上面的代码中,它实际上显示了对话框,并在Thread run()方法中立即关闭它。如果你真的想看看它是否显示了一个Thread.sleep(2000)进行测试,但是是的,John Russell说的是使用AsyncTask的方式。