防止ProgressDialog被解雇onClick事件

时间:2015-03-23 19:26:03

标签: java android dialog progressdialog

以前的帖子已经提到了这个问题,但是我尝试了很多,但似乎都没有。我有一个布尔标志,理论上应该阻止我的对话框被关闭。以下是我到目前为止的情况:

boolean start_match = false;    
public void WarmupDialog()
{
    if(use_warmup == true)
    {
        final ProgressDialog spinner = new ProgressDialog(this);
        spinner.setTitle("Warmup");
        spinner.setCancelable(false);
        spinner.setCanceledOnTouchOutside(false);
        timer = new CountDownTimer(300000, 1000)//5 minutes
        {
            @Override
            public void onFinish() 
            {
                spinner.cancel();
            }

            @Override
            public void onTick(long l) 
            {
                spinner.setMessage(((int)Math.round(l/1000.0)-1)+"secs remaining of warmup");
            }
        };
        spinner.setButton(DialogInterface.BUTTON_POSITIVE, "Start Warmup", (DialogInterface.OnClickListener)null) ;
        spinner.show();

        Button button = spinner.getButton(DialogInterface.BUTTON_NEUTRAL);
        button.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v) 
            {
                if(start_match)
                {
                    spinner.dismiss();
                }
                else
                {
                    start_match = true;
                    Button button = spinner.getButton(DialogInterface.BUTTON_POSITIVE);
                    button.setText("Start Match");
                    timer.start();
                }
            }
        });

        spinner.setOnCancelListener(new DialogInterface.OnCancelListener() 
        {   
            @Override
            public void onCancel(DialogInterface dialog) 
            {
                timer.cancel();
                ChooseServer();
            }
        });

    }
    else
    {
        ChooseServer();
    }
}

这为网球比赛打开了一个热身计时器。第一次按下该按钮时,计时器应该启动。再次按下该按钮时,应该取消dailog。此时对话框立即被解除。有任何想法吗? 在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

就我对进步对话的了解而言,它应该是正常行为。

由于ProgressDialog继承自AlertDialog - >对话框,默认情况下,当用户按下对话框上的按钮时,无论它是哪个按钮(正/负等),它们都会被解除。

建议:拦截触摸事件&检测触摸事件的源位置(即用户触摸了哪个按钮),我们应该能够覆盖此行为。