是否有可能在动态(而不是从UI线程)上更改PD的样式,消息和标题?
我想要做以下事情。拳头时间PD显示在STYLE_SPINNER,因为它看起来像无尽的进步,并显示消息通知用户该应用程序正在看4东西(某些更新4实例)。当它发现它需要做些什么(安装它)。在这一点上,我想要展示HORIZONTAL样式的PD,因为它确实显示了进度状态,而不是微调样式。ProgressDialog的风格,标题和消息可以随时更改吗?
无论如何,我尝试PD.setMax()时得到NullPointerException。 PD不是空的,所以我不能得到正在发生的事情。
这是在我的活动类的内部类:
private class RestoreDBTask extends AsyncTask <Void, Void, String>
{
private ProgressDialog dialog;
private Handler handler;
@Override
protected void onPreExecute()
{
this.dialog = new ProgressDialog(SplashActivity.this);
this.dialog.setTitle(getString(R.string.progress_wait));
this.dialog.requestWindowFeature(Window.FEATURE_PROGRESS);
// this.dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
this.dialog.setProgress(0);
this.dialog.show();
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
RestoreDBTask.this.dialog.hide();
switch (msg.what) {
case 0:{
RestoreDBTask.this.dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
break; }
case 1: {
RestoreDBTask.this.dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
break; }
case -1: {
RestoreDBTask.this.dialog.setMessage(getResources().getString(R.string.progress_db_installing));
break; }
case -2: {
RestoreDBTask.this.dialog.incrementProgressBy(1);
break; }
default: {
Log.i(APP_TAG,""+RestoreDBTask.this.dialog.getMax());
RestoreDBTask.this.dialog.setMax(msg.what); }
}
RestoreDBTask.this.dialog.show();
}
};
}
@Override
protected String doInBackground(Void... params)
{
mDBHelper.initDB(dialog,handler);
return "";
}
@Override
protected void onPostExecute(String result)
{
dialog.dismiss();
startNextActivity();
}
}
一些INT值假定如果msg.what> 1是最大值的mDBHelper.initDB()方法使用handler.sendEmptyMessage()调用为PD。
此外,我不明白为什么PD不显示进度状态,如果它的风格是STYLE_SPINNER?如果我将其更改为STYLE_HORIZONTAL,它可以正常工作...
没有保护void onProgressUpdate(Integer ... params)方法来覆盖,但有保护无效onProgressUpdate(Void ... params)方法。所以我不知道接下来会发生什么。如何从int或东西投射到Void? publishProgress方法应该位于哪里?我猜在Activity中?那么链接到ProgressDialog应该创建为Activity的属性?如果在我的mDBHelper我有活动的链接,为什么我不应该使用直接调用,即mDBHelper.mActivity.publishProgress()或mDBHelper.mContext.publishProgress()(我的意思是在initDB()方法)? – Stan 2011-04-14 12:41:51
将'AsynchronousTask'中的第二个类型改为'extends AsyncTask '。 –
Wroclai
2011-04-14 12:51:58
好吧,PD链接是什么? – Stan 2011-04-14 13:07:57