Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 警报对话框出现两次_Java_Android_Android Alertdialog - Fatal编程技术网

Java 警报对话框出现两次

Java 警报对话框出现两次,java,android,android-alertdialog,Java,Android,Android Alertdialog,调用showtimedilog()时,对话框会出现两次。当我单击“确定”时,另一个对话框正在等待 public void showTimeDialog(){ final TimePicker timePicker = new TimePicker(this); timePicker.setIs24HourView(true); timePicker.setCurrentHour(20); timePicker.setCurrentMinute(15);

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

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

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

编辑

它可以正常工作,因为您的对话框被触发两次。这是因为您正在
onTouch()
中执行此操作,然后启动第一个对话框,然后触摸屏幕(这会触发触摸事件
操作向下
),然后松开手指,从而触发
操作向上
。为了避免这种情况,您可能希望在代码中添加条件,我建议您对
操作_UP
做出如下反应:

public boolean onTouch(View v, MotionEvent event) {
    if (event.getActionMasked() == MotionEvent.ACTION_UP) {
        showTimeDialog();
    }
}

你确定只叫过一次吗?你做过日志输出吗?我的猜测是,由于您在
onTouch
中调用该方法,因此调用该方法的次数比您想象的要多

onTouch(视图,运动事件)
不仅在触摸视图时被调用。一次按一下就会调用很多次,您可以查看文档以查看调用此方法的所有可能操作

可能发生的情况是,当发生
ACTION\u DOWN
事件时,会打开
showtimediao()
方法,然后在发生
ACTION\u UP
ACTION\u CANCEL
事件时再次打开方法,因为您的对话框现在阻止了视图。尝试按如下方式更改您的
onTouch
方法:

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

我不确定是否有人投了反对票,或者为什么人们至少不发表评论,但我猜还是要提供调用
showtimedilog()
的代码。另外,请解释到目前为止您在调试方面做了哪些尝试,以便我们能够进一步提供帮助。1。当你说函数被调用了两次时,为什么要在函数内部发布代码?你认为这有多有用?2.“为什么会发生这种事”对其他人没用。我的坏!请立即选中,确保仅当MotionEvent值处于“向上”时才显示时间对话框,从而限制触摸事件state@eee-谢谢,这就是我看到的问题。添加了调用
showtimedilog
方法的代码。请检查一下谢谢:)这就是问题所在。非常感谢。成功了。