执行解雇,隐藏或取消后,ProgressDialog不会消失?

Mar*_*tin 2 android progressdialog

我有一个Overlay扩展,它有2个对话框作为私有属性 - 一个Dialog和一个ProgressDialog.单击MapView中的Overlay后,将出现Dialog对象.当用户单击对话框中的按钮时,它将消失并显示ProgressDialog.同时通过通知正在运行的服务来启动后台任务.任务完成后,将调用Overlay对象中的方法(buildingLoaded)以切换视图并关闭ProgressDialog.正在切换视图,正在运行代码(我使用调试器检查)但是ProgressDialog没有被解雇.我也试过hide()和cancel()方法,但没有任何效果.有人能帮助我吗?Android版本是2.2

这是代码:

public class LODOverlay extends Overlay implements OnClickListener {



private Dialog overlayDialog;

private ProgressDialog progressDialog;

       ..............


@Override
public void onClick(View view) {

                   .......

        final Context ctx = view.getContext();
        this.progressDialog = new ProgressDialog(ctx);
        ListView lv = new ListView(ctx);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(ctx, R.layout.layerlist, names);
        lv.setAdapter(adapter);
        final LODOverlay obj = this;
        lv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
                String name = ((TextView) view).getText().toString();
        Intent getFloorIntent = new Intent(Map.RENDERER);
        getFloorIntent.putExtra("type", "onGetBuildingLayer");
        getFloorIntent.putExtra("id", name);
        view.getContext().sendBroadcast(getFloorIntent);
        overlayDialog.dismiss();

        obj.waitingForLayer = name;

        progressDialog.show(ctx, "Loading...", "Wait!!!");


            }
        });

    .......
}


public void buildingLoaded(String id) {
    if (null != this.progressDialog) {
        if (id.equals(this.waitingForLayer)) {
            this.progressDialog.hide();
            this.progressDialog.dismiss();

    ............

            Map.flipper.showNext();  // changes the view
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

}

dav*_*e.c 6

不确定这是否是您的问题的原因,但您正在调用的方法ProgressDialogstatic,但您在类的实例上调用它.这是方法定义:

public static ProgressDialog show (Context context, CharSequence title, CharSequence message)
Run Code Online (Sandbox Code Playgroud)

如您所见,该方法返回 a ProgressDialog,它不会show对您的类实例执行操作.更新您的代码以使用以下其中一个:

progressDialog.setTitle("Loading...");
progressDialog.setMessage("Wait!!!");
progressDialog.show();
Run Code Online (Sandbox Code Playgroud)

要么

progressDialog = ProgressDialog.show(ctx, "Loading...", "Wait!!!");
Run Code Online (Sandbox Code Playgroud)