-1

私は ItemizedOverlay でいくつかの pois を示す mapview を持っています。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);
4

1 に答える 1

1

うーん...

「//いくつかの作業を行う」には、 onTap で使用されているスレッドと同じスレッドでの作業が含まれますか? もしそうなら、それは ui thread ですので、あなたは ui thread に 2 つのメッセージを送信しました - 1 つは表示するメッセージ、もう 1 つは非表示にするメッセージです。それら 、非常に短い時間 (おそらく気付かない) の間、progressDialog が表示されます。

とにかく、バックグラウンド作業に別のスレッドを使用するか、 asyncTask を使用してください。

asyncTask を使用すると、作業開始前にダイアログを表示し、終了/キャンセル時に非表示にすることができます。

于 2012-07-23T23:09:51.087 に答える