ProgressDialog 没有出现在 onProgressUpdate 方法中
ProgressDialog does not appear in method onProgressUpdate
在 Asyntask 中,我在 Asyntask 的全局变量中实例化了一个进度对话框:
ProgressDialog progressDialog;
然后,在 DoInBackGround 中,我调用 "publishProgress",因此调用了 onProgressUpdate。
在 onProgressUpdate 中,我有以下代码:
this.progressDialog=new ProgressDialog(mActivity);
this.progressDialog.setCancelable(true);
this.progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
this.progressDialog.setTitle("Iniciando la comunicación");
this.progressDialog.show();
我不知道为什么,progressDialog 从未显示。我尝试在相同的上下文中使用 Toast,并且效果很好。虽然progressDialog没有。
---------更新-------------
最后,我通过通知解决了这个问题。
我两年前看到过这个问题。主 UI 线程交互时有一些不可预测的行为。
我找到的解决方案是使用 Thread
而不是 AsyncTack
.
一个简单的例子:
new Thread(new Runnable() {
public void run() {
//background code to calculate
//for example
for(int i = 0; i < 100000000L; i++){
myHugeCalc(i);
final int prog = i;
runOnUiThread(new Runnable() {
public void run() {
pbtext.setText("My progress: " + prog);
}
});
}
}).start();
还有另一种方法...
当您从 class 调用此同步过程时,开始在那里显示进度对话框,然后 onPostExecute
取消它。
它会做你的工作......
但最佳做法是在 onPreExecute
中进行
像这样组织你的AsyncTask
private class YourTask extends AsyncTask<String, String, String> {
ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
...
// show the dialog
this.progressDialog=new ProgressDialog(mActivity);
this.progressDialog.setCancelable(true);
this.progressDialog.setProgressStyle(ProgressDialog. STYLE_HORIZONTAL);
//this.progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
this.progressDialog.setTitle("Iniciando la comunicación");
this.progressDialog.show();
}
@Override
protected String doInBackground(String... urls) {
...
publishProgress("" + progress);
...
}
protected void onProgressUpdate(String... progress) {
progressDialog.setProgress(Integer.parseInt(progress[0]));
}
@Override
protected void onPostExecute(String result) {
// dismiss the dialog
progressDialog.dismiss();
...
}
}
你还想 public 当 AsyncTask
是 运行 时的进度,所以你需要 STYLE_HORIZONTAL
ProgressBar
而不是 STYLE_SPINNER
ProgressBar
希望对您有所帮助
在 Asyntask 中,我在 Asyntask 的全局变量中实例化了一个进度对话框:
ProgressDialog progressDialog;
然后,在 DoInBackGround 中,我调用 "publishProgress",因此调用了 onProgressUpdate。 在 onProgressUpdate 中,我有以下代码:
this.progressDialog=new ProgressDialog(mActivity);
this.progressDialog.setCancelable(true);
this.progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
this.progressDialog.setTitle("Iniciando la comunicación");
this.progressDialog.show();
我不知道为什么,progressDialog 从未显示。我尝试在相同的上下文中使用 Toast,并且效果很好。虽然progressDialog没有。
---------更新-------------
最后,我通过通知解决了这个问题。
我两年前看到过这个问题。主 UI 线程交互时有一些不可预测的行为。
我找到的解决方案是使用 Thread
而不是 AsyncTack
.
一个简单的例子:
new Thread(new Runnable() {
public void run() {
//background code to calculate
//for example
for(int i = 0; i < 100000000L; i++){
myHugeCalc(i);
final int prog = i;
runOnUiThread(new Runnable() {
public void run() {
pbtext.setText("My progress: " + prog);
}
});
}
}).start();
还有另一种方法...
当您从 class 调用此同步过程时,开始在那里显示进度对话框,然后 onPostExecute
取消它。
它会做你的工作......
但最佳做法是在 onPreExecute
像这样组织你的AsyncTask
private class YourTask extends AsyncTask<String, String, String> {
ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
...
// show the dialog
this.progressDialog=new ProgressDialog(mActivity);
this.progressDialog.setCancelable(true);
this.progressDialog.setProgressStyle(ProgressDialog. STYLE_HORIZONTAL);
//this.progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
this.progressDialog.setTitle("Iniciando la comunicación");
this.progressDialog.show();
}
@Override
protected String doInBackground(String... urls) {
...
publishProgress("" + progress);
...
}
protected void onProgressUpdate(String... progress) {
progressDialog.setProgress(Integer.parseInt(progress[0]));
}
@Override
protected void onPostExecute(String result) {
// dismiss the dialog
progressDialog.dismiss();
...
}
}
你还想 public 当 AsyncTask
是 运行 时的进度,所以你需要 STYLE_HORIZONTAL
ProgressBar
而不是 STYLE_SPINNER
ProgressBar
希望对您有所帮助