2012-04-22 73 views
0

我在進行ProgressDialog輪子旋轉時遇到問題。這裏是我的代碼:Android:ProgressDialog不旋轉

final ProgressDialog dialog = ProgressDialog.show(this, "", "Loading...", true, false); 
Thread thread=new Thread(new Runnable(){ 
    public void run(){ 
    runOnUiThread(new Runnable(){ 
     @Override 
     public void run() { 
      if(dialog.isShowing()) 
       // starts a foreground service, does database stuff, 
       // sets up a spinner with values 
       dialog.dismiss(); 
      } 

     }); 
    } 
}); 

thread.start(); 

一切按計劃進行,我得到的ProgressDialog,事情發生在後臺,一旦設定,ProgressDialog消失 - 唯一的問題是,在ProgressDialog動畫不旋轉,幾乎使其無用。

我在做什麼錯?

+0

爲什麼你又要開始新的線程 – 2012-04-22 12:41:50

+0

我現在用你的代碼測試了一個項目,它正在爲我旋轉。 – 2012-04-22 12:50:38

+0

Agarwal - 如果我沒有啓動一個新線程,微調控制器將在UI線程中運行,然後它不會顯示。 – vampireLady 2012-04-22 14:02:10

回答

1

的代碼,你在這裏省略

 // starts a foreground service, does database stuff, 
     // sets up a spinner with values 

必須做的阻塞UI線程的東西。只需將它們放在runOnUiThread()方法之外即可。

Thread thread=new Thread(new Runnable(){ 
    public void run(){ 
     // starts a foreground service, does database stuff, 
     // sets up a spinner with values 
     runOnUiThread(new Runnable(){ 
      @Override 
      public void run() { 
      if(dialog.isShowing()) 
       dialog.dismiss(); 
      } 

     }); 
    } 
}); 
0

ProgressDialog例如使用處理器的Android

final ProgressDialog dialog = ProgressDialog.show(this, "Title", 
      "Message", true); 

    final Handler handler = new Handler() { 
     public void handleMessage(Message msg) { 
      dialog.dismiss(); 
     } 
    }; 
    Thread t = new Thread() { 
     public void run() { 
      // write process code here. 

      handler.sendEmptyMessage(0); 
     } 
    }; 
    t.start(); 

修復問題:ProgressDialog不工作

0

因爲你把處理對話框中的錯誤區域,例如我的錯誤: 我有一個兩個活動:MainActivityShowingActivity,MainActivity將在新的意圖轉移到顯示後顯示處理對話框ingActivity和ShowingActivity會從服務器獲取一些數據(它會在這裏被阻止)。當我在MainActivity中調用ProcessingDialog時,它顯示但不旋轉,因爲我的意圖移動到了ShowingActivity並且它阻止了Ui,因爲從服務器獲取數據的操作必須等待幾秒鐘。所以我固定它: 1 /在MainActivity電話:

final Intent working = new Intent(getApplicationContext(), 
        WorkingActivity.class); 
final ProgressDialog ringProgressDialog = ProgressDialog.show(
        MainActivity.this, "Please wait ...", "Connecting ...", 
        true); 
ringProgressDialog.setCancelable(false); 
new Thread(new Runnable() { 
         @Override 
         public void run() { 
          //Menthod need time to load: 
            getDatafromServer(); 
          if (BookListFragment.isLoaded) { 
           ringProgressDialog.dismiss(); 
           startActivity(working); 
           return; 
          } 
}); 

所以它不會阻止UI數據被得到,因爲後仍MainActivity乳寧。 而在ShowsActivity中,我將使用這個數據(因爲我設置DATA是一個靜態字符串)。