UI 스레드가 아닌 PD의 스타일, 메시지 및 제목을 즉시 변경할 수 있습니까?
다음과 같이하고 싶습니다. 주먹 시간 PD는 STYLE_SPINNER에서 끝이없는 진행 상황처럼 보이고 앱에 4 가지 (일부 업데이트 4 인스턴스)가 있음을 알리는 메시지를 표시합니다. 그리고 그걸 발견했을 때 무언가를해야만했습니다 (설치하십시오). 이 시점에서 나는 HORIZONTAL 스타일의 PD를 보여주고 싶습니다. 스피너 스타일 대신 진행 상태를 보여줍니다.ProgressDialog의 스타일, 제목 및 메시지를 즉시 변경할 수 있습니까?
어쨌든 PD.setMax()를 시도하는 동안 NullPointerException이 발생했습니다. PD는 null이 아니므로 무슨 일이 일어나는지 알 수 없습니다.
이 내 활동 클래스의 내부 클래스이다
mDBHelper.initDB() 메소드는 handler.sendEmptyMessage()를 사용이 msg.what> 1이 최대 값 인 경우, 일부 INT 값을 가정하여 호출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();
}
}
PD 용.
또한 스타일이 STYLE_SPINNER 인 경우 왜 PD가 진행 상태를 표시하지 않는지 알 수 없습니까? STYLE_HORIZONTAL로 변경하면 문제가 해결됩니다.
재정의 할 보호 된 void onProgressUpdate (Integer ... params) 메소드가 없지만 protected void onProgressUpdate (Void ... params) 메소드가 있습니다. 그래서 나는 다음에 무엇이 있는지 모른다. int 또는 무언가에서 void로 캐스팅하는 방법? publishProgress 메서드를 어디에 배치해야합니까? 나는 활동에서 추측한다? 그런 다음 ProgressDialog에 대한 링크를 Activity의 속성으로 만들어야합니까? 내 mDBHelper에 내가 직접 호출, 즉 mDBHelper.mActivity.publishProgress() 또는 mDBHelper.mContext.publishProgress() (즉, initDB() 메소드에서 사용하는 경우)를 사용하면 안되는 Activity에 대한 링크가 있습니까? – Stan
'AsyncTask에서 두 번째 유형을'extends AsyncTask '으로 변경하십시오. –
Wroclai
괜찮습니까? PD 링크는 무엇입니까? – Stan