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
方法的代码。请检查一下谢谢:)这就是问题所在。非常感谢。成功了。