如何在不调用Dismiss的情况下取消一个ProgressDialog?

3
当我按下取消按钮时,将同时出现取消的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();

编辑2:最终解决方案:

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();

4
你真的需要这个功能吗? - Egor
2个回答

2

文档:

public void cancel ()

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

如果你不想两者都显示,只需使用dismiss()。当您取消时,它首先解除绑定,然后取消对话框。这会导致两个侦听器同时触发。除非您想覆盖cancel()本身并实现自己的方法,否则没有好的方法。不过我看不出有很好的理由这样做。

另外,我支持Egor的评论。如果你真的需要“练习”,请详细说明你要做什么。

编辑: 根据您下面的评论,我建议根本不使用侦听器。如果在解除绑定/取消时所有您需要做的就是显示toast,请直接创建toast。

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();
}

当我按下“取消”按钮时,我需要一个Toast,当ProgressDialog正确完成(当我解除它时)时,我需要另一个不同的Toast。但现在,当ProgressDialog正确完成时,我有了正确的Toast,但是当我按下“取消”按钮时,结果是两个Toast都出现了。(这是一个带有增加5以完成的进度条的ProgressDialog)。对我的英语表示抱歉:S。 - Baltus
我明白了,已经更新了答案。除非你需要做一些除了toast之外的事情,否则跳过监听器会更容易。 - Geobits

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接