当我开始新活动时,我的progressDialog不会立即出现。我正在使用AsyncTask。我正在下一个活动中从Web服务加载数据。以下是我的异步类:
private class TheTask extends AsyncTask<Void, Void, Void>{
Context con;
Intent aboutusIntent;
TabGroupActivity parentActivity;
private TheTask(Context context)
{
this.con=context;
}
@Override
protected void onPreExecute() {
progDialog = ProgressDialog.show(con, "Loading... ",
"please wait....", true);
}
@Override
protected Void doInBackground(Void... params) {
aboutusIntent = new Intent(con, Departments.class);
parentActivity = (TabGroupActivity)getParent();
//progDialog.show();
return null;
}
@Override
protected void onPostExecute(Void result) {
parentActivity.startChildActivity("Departments", aboutusIntent);
if(progDialog.isShowing())
{
progDialog.dismiss();
}
}
}
我正在点击按钮创建此类的实例:
ourdepbtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new TheTask(AboutUs.this.getParent()).execute();
}
});
有什么建议吗?
答案 0 :(得分:3)
Handler mHandler = new Handler();// This statement is to be called by the main thread
ProgressDialog.show();// This statement is to be called by the main thread
Thread t = new Thread(
new Runnable(){
public void run()
{
callWebServicesHereAndFetchingMethod(); //
mHandler.post(new Runnable(){
public void run()
{
ProgressDialog.dismiss();
}
});
}});
t.start();
答案 1 :(得分:1)
您的代码需要多线程....所有视觉效果都由您的主线程控制。如果您使用主线程进行任何处理或从Web服务中说出数据,则不会出现进度对话框。 进行主线程调用的进度对话框显示功能。使用另一个线程进行所有获取。创建一个将加入你的提取线程的线程,并使用Handler类对象产生你想要做的任何视觉效果
如果您需要对此进行详细阐述。我也会发布这个
答案 2 :(得分:1)
用户界面(UI)不是线程安全的,必须从主线程(也称为“UI线程”)调用UI。
Handler handler = new Handler(); // Create on main thread.
// ...
handler.post(new Runnable() {
@Override
public void run() {
ProgressDialog dialog = ProgressDialog.show(this, "",
"Loading. Please wait...", true);
}
});
答案 3 :(得分:1)
您正在寻找的是AsyncTask,您可以在其中显示/隐藏onPreExecute()/ onPostExecute()
中的ProgressDialog您可以阅读更多相关信息here