我希望在uithread睡眠时显示ProgressDialog,以便在恢复服务器的数据之前,我的活动将不会显示。我怎么能这样做?
答案 0 :(得分:1)
您可以使用Thread
,AsyncTask
或Service
在后台加载数据,并使用Handler
实施控制ProgressDialog
。
The example in this post显示如何使用线程进行登录请求,同时显示进度对话框。
使用AsyncTask
更容易,更清晰:
private static final int WAIT = 11;
private final class MyTask extends AsyncTask<Void, Void, Void>
{
@Override
protected void onPreExecute()
{
super.onPreExecute();
// Show up the dialog with id=WAIT [11]
showDialog(WAIT);
// other actions that must be performed in the UI thread
// before the background works starts
}
@Override
protected Void doInBackground(Void... params)
{
// perform the background work
return null;
}
@Override
protected void onPostExecute(Void result)
{
super.onPostExecute(result);
// Remove the dialog with id=WAIT [11]
removeDialog(WAIT);
// other actions that must be performed in the UI thread
// after the background works finished
}
}
[...]
final MyTask task = new MyTask();
task.execute(null);
由于AsyncTask
是泛型类型,因此您可以为首选项指定参数类型,因此将数据从ui线程传输到后台线程并返回后非常方便。
您的对话框部分只是您活动中的几行:
private ProgressDialog dialog;
@Override
protected Dialog onCreateDialog(int id)
{
switch (id)
{
case WAIT:
{
dialog = new ProgressDialog(this);
dialog.setMessage("Loading...");
dialog.setIndeterminate(true);
dialog.setCancelable(true);
return dialog;
}
}
return null;
}
答案 1 :(得分:1)
此任务通常通过与进度对话框绑定的AsyncTask来解决。请参阅此article。
答案 2 :(得分:0)
将您的网络流程代码移至Thread
并获取ProgressDialog
。完成网络流程后,通过调用.start();
然后ProgressDialog.show();
启动网络流程,从ProgressDialog
停止Handler
到Thread.run()
。
答案 3 :(得分:0)
您可以在ur thread
中尝试使用此代码进行进度拨号ProgressDialoge pd = ProgressDialog.show(this,“Please wait ...”,“Retriending data。”,true,false);