progressDialog没有显示

时间:2012-07-23 23:01:05

标签: android android-mapview handler progressdialog itemizedoverlay

我有一个mapview,显示了一些带有ItemizedOverlay的poi。当我点击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的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 个答案:

答案 0 :(得分:1)

嗯...嗯...

“//做一些工作”是否涉及与onTap上使用的线程相同的线程? 如果是这样,那就是ui线程,所以你发送了ui线程2消息 - 一个显示,一个隐藏,甚至可以处理它们,当它最终到达它可以处理它们的点时,它处理两个它们,所以在非常短的时间内(可能没有注意到)将显示progressDialog。

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

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