AlertDialog出现两次

时间:2015-08-06 15:12:38

标签: java android alertdialog

调用showTimeDialog()时,会出现两次对话框。当我点击“确定”时,会有另一个对话框在等待。

public void showTimeDialog(){
    final TimePicker timePicker = new TimePicker(this);
    timePicker.setIs24HourView(true);
    timePicker.setCurrentHour(20);
    timePicker.setCurrentMinute(15);

    timeDialog=new AlertDialog.Builder(this)
    .setTitle("Test")
    .setPositiveButton(android.R.string.ok, new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            Log.d("Picker", timePicker.getCurrentHour() + ":"
                    + timePicker.getCurrentMinute());
            dialog.dismiss();
        }
    })
    .setNegativeButton(android.R.string.cancel,
            new OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog,
                        int which) {
                    Log.d("Picker", "Cancelled!");
                    dialog.dismiss();
                }
            }).setView(timePicker).show();
}

onCreate()中,我有:

        editText_time.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View arg0, MotionEvent arg1) {
            showTimeDialog();
            return false;
        }
    });

2 个答案:

答案 0 :(得分:2)

在您调用showTimeDialog()方法的代码中,您希望它不会返回,除非对话框被解除。如果是这样(你的问题不完整,所以我部分猜测),那么这是错误的,因为对话框是异步的。

修改

当你的对话框被触发两次时它工作正常。这是因为您在onTouch()中执行此操作,然后启动第一个对话框,然后触摸屏幕(因为这会触发触摸事件ACTION_DOWN),然后释放触发{{1}的手指}。为避免这种情况,您可能需要在代码中添加条件,我建议您对ACTION_UP做出反应,如下所示:

ACTION_UP

答案 1 :(得分:1)

你确定它只被调用一次吗?你做过任何日志输出吗?我的猜测是因为你在onTouch中调用方法,所以这种方法的调用次数比你想象的要多。

onTouch(View, MotionEvent)不仅在触摸视图时被调用。通过单次按下可以多次调用它,您可以查看MotionEvent文档以查看调用此方法的所有可能操作。

可能发生的事情是showTimeDialog()方法在ACTION_DOWN事件发生时被打开,然后当ACTION_UPACTION_CANCEL事件发生时,因为您的对话框现在正在阻止风景。尝试更改onTouch方法,如下所示:

public boolean onTouch(View arg0, MotionEvent arg1) {
    if (arg1.getActionMasked() == MotionEvent.ACTION_UP)
        showTimeDialog();
    return false;
}