-1

我有一個mapview顯示一些pois與ItemizedOverlay。當我點擊一個POI時,一些工作開始,並且需要幾秒鐘。在onTap方法中,我調用處理程序來顯示對話框並隱藏它。progressDialog不顯示

我調試代碼,我檢查處理程序的開關case Util.SHOW_DIALOG:被稱爲正確的,但不被顯示給用戶的對話框.....

什麼是錯在我的代碼?

這是我MyMapActivity類的一部分,因爲你可以看到我的MapView富人的處理程序:

public Handler dialogHandler; 
private ProgressDialog progressDialog; 

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);    
. 
. 
. 
/* handler para mostrar y ocultar el reloj de carga */ 
     dialogHandler = new Handler(){ 
      @Override 
      public void handleMessage(Message msg) { 
       super.handleMessage(msg);    
       switch(msg.what){ 
        case Util.SHOW_DIALOG: 
         progressDialog = ProgressDialog.show(MyMapActivity.this, "" , "Cargando...", false); 
         break; 
        case Util.HIDE_DIALOG: 
         if(progressDialog != null) 
          progressDialog.dismiss(); 
         progressDialog = null; 
         break;    
       } 
      } 
     }; 

這是ItemizedOverlay類的一部分,ItemizedOverlay的和Ontap方法調用這段代碼的處理程序:

protected boolean onTap(int index) { 
      try{ 
       OverlayItem item = (OverlayItem)this.mOverlays.get(index);  
        map.dialogHandler.sendEmptyMessage(Util.SHOW_DIALOG); 
. 
. 
//doing some work 
. 
. 
map.dialogHandler.sendEmptyMessage(Util.HIDE_DIALOG); 

回答

1

嗯...

,那麼「//做一些工作」涉及同一個線程上使用的onTap的一個上工作? 如果是這樣,這就是UI線程,所以你已經發送了UI線程2條消息 - 一條顯示,一條隱藏,甚至在它可以處理它們之前,當它最終達到它可以處理它們的點時,它處理在很短的時間內(可能未被注意到),progressDialog會顯示出來。

無論如何,使用另一個線程爲後臺工作,或使用asyncTask。

如果您使用asyncTask,您可以在工作開始前顯示對話框,並在完成/取消時隱藏它。