代码之家  ›  专栏  ›  技术社区  ›  Pableras84

progressDialog不显示

  •  -1
  • Pableras84  · 技术社区  · 12 年前

    我有一个地图视图,显示了一些带有ItemizedOverlay的pois。当我点击POI时,一些工作开始了,需要几秒钟的时间。在onTap方法中,我调用处理程序来显示对话框,并隐藏它。

    我调试代码并检查 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 使用以下代码调用处理程序:

    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 回复  |  直到 12 年前
        1
  •  1
  •   android developer    12 年前

    嗯。。。

    “//做一些工作”是否涉及在与onTap上使用的线程相同的线程上工作? 如果是这样的话,那就是ui线程,所以你已经向ui线程发送了2条消息——一条要显示,另一条要隐藏,甚至在它能够处理它们之前,当它最终达到可以处理它们的程度时,它会同时处理这两条消息,所以在很短的时间内(可能没有注意到),progressDialog将显示出来。

    无论如何,使用另一个线程进行后台工作,或者使用asyncTask。

    如果使用asyncTask,则可以在工作开始前显示对话框,并在工作完成/取消时隐藏对话框。