-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,您可以在工作开始前显示对话框,并在完成/取消时隐藏它。