【问题标题】:How to Cancel a ProgressDialog without call Dismiss?如何在不调用 Dismiss 的情况下取消 ProgressDialog?
【发布时间】:2012-11-07 15:03:42
【问题描述】:

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

【问题讨论】:

  • 你真的需要这个功能吗?

标签: android progressdialog toast dismiss


【解决方案1】:

Documentation:

公共无效取消()

取消对话框。这与调用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。 (这是一个 ProgressDialog,带有一个以 5 为增量完成的栏)。对不起我的英语:S。
  • 我明白了,更新了答案。除非您需要在 toasts 之外做其他事情,否则跳过听众会更容易。
【解决方案2】:

调用前

myPd_bar.show();

这样做,

myPd_bar.setCancelable(true);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    相关资源
    最近更新 更多