3

当我按下取消按钮时,会出现取消的吐司和解雇的吐司。我该如何解决这个问题?谢谢。

编辑:按下取消按钮时我需要一个 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();
4

2 回答 2

2

文档:

公共无效取消()

取消对话框。这与调用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();
}
于 2012-11-07T15:21:41.730 回答
0

打电话之前

myPd_bar.show();

做这个,

myPd_bar.setCancelable(true);

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

于 2012-11-07T15:21:32.640 回答