如何在没有调用Dismiss的情况下取消ProgressDialog?

时间:2012-11-07 15:03:43

标签: android progressdialog toast dismiss

当我按下取消按钮时,会出现取消的Toast和解雇的Toast。我怎么解决这个问题?感谢。

编辑:按下取消按钮时我需要一个Toast,当ProgressDialog正确完成时(当我解除它时)我需要另一个不同的Toast。但是现在,当ProgressDialog正确完成时,我有正确的Toast,但是当我按下取消按钮时,结果都是Toast。 (这是一个ProgressDialog,其中一个栏增加了5来完成)。对于我的英语:S

myPd_bar.setOnCancelListener(new OnCancelListener(){

                public void onCancel(DialogInterface dialog) {
                    // TODO Auto-generated method stub
                    Toast.makeText(MainActivity.this,"Cancelled.",
                            Toast.LENGTH_LONG).show();

                }});

            myPd_bar.setOnDismissListener(new OnDismissListener() {

                public void onDismiss(DialogInterface arg0) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getApplicationContext(), "Done.",
                            Toast.LENGTH_SHORT).show();
                }
            });
            myPd_bar.setButton("Cancel", new DialogInterface.OnClickListener() 
            {
                public void onClick(DialogInterface dialog, int which) 
                { 
                    myPd_bar.cancel();
                }
            });

            myPd_bar.show();

EDIT2:最终解决方案:

private int sw = 0;

myPd_bar.setOnDismissListener(new OnDismissListener() {

                    public void onDismiss(DialogInterface arg0) {

                        if (sw==0){
                        Toast.makeText(getApplicationContext(), "Envio Realizado Correctamente.",
                                Toast.LENGTH_SHORT).show();
                        }
                        myPd_bar.dismiss();
                            sw=0;
                        }
                });


                //Botón Cancelar.
                myPd_bar.setButton("Cancelar", new DialogInterface.OnClickListener() 
                {
                    public void onClick(DialogInterface dialog, int which) 
                    { 
                        sw = 1;
                        //Mostramos el mensaje al cancelar.
                        Toast.makeText(MainActivity.this,"Envío Cancelado.", Toast.LENGTH_LONG).show();
                        myPd_bar.cancel();
                    }
                });

                myPd_bar.show();

2 个答案:

答案 0 :(得分:2)

Documentation:

  

public void cancel()

     

取消对话框。这与调用dismiss()基本相同,但它也会调用DialogInterface.OnCancelListener(如果已注册)。

如果您不想同时展示,请使用dismiss()。取消时,首先取消,然后取消对话框。这会导致两个听众都开火。除非你想覆盖cancel()本身并实现自己的方法,否则真的没办法解决它。但是,我看不出有这么好的理由。

另外,我是第二个Egor的评论。如果您真的需要“为了练习”,请准确解释您正在尝试做什么。

修改:从下面的评论中,我建议您根本不使用听众。如果你需要做的就是放弃/取消,那就直接创建祝酒词。

myPd_bar.setButton("Cancel", new DialogInterface.OnClickListener() 
{
    public void onClick(DialogInterface dialog, int which) 
    { 
        Toast.makeText(MainActivity.this,"Cancelled.", Toast.LENGTH_LONG).show();
        myPd_bar.cancel();
    }
});

void dismissDialog(Context myContext)
{
    Toast.makeText(myContext, "Done.", Toast.LENGTH_SHORT).show();
    myPd_bar.dismiss();
}

答案 1 :(得分:0)

致电

之前
myPd_bar.show();

这样做,

myPd_bar.setCancelable(true);

更多信息: http://developer.android.com/reference/android/app/Dialog.html#setCancelable(boolean