调用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;
}
});
答案 0 :(得分:2)
在您调用showTimeDialog()
方法的代码中,您希望它不会返回,除非对话框被解除。如果是这样(你的问题不完整,所以我部分猜测),那么这是错误的,因为对话框是异步的。
修改强>
当你的对话框被触发两次时它工作正常。这是因为您在onTouch()
中执行此操作,然后启动第一个对话框,然后触摸屏幕(因为这会触发触摸事件ACTION_DOWN
),然后释放触发{{1}的手指}。为避免这种情况,您可能需要在代码中添加条件,我建议您对ACTION_UP
做出反应,如下所示:
ACTION_UP
答案 1 :(得分:1)
你确定它只被调用一次吗?你做过任何日志输出吗?我的猜测是因为你在onTouch
中调用方法,所以这种方法的调用次数比你想象的要多。
onTouch(View, MotionEvent)
不仅在触摸视图时被调用。通过单次按下可以多次调用它,您可以查看MotionEvent文档以查看调用此方法的所有可能操作。
可能发生的事情是showTimeDialog()
方法在ACTION_DOWN
事件发生时被打开,然后当ACTION_UP
或ACTION_CANCEL
事件发生时,因为您的对话框现在正在阻止风景。尝试更改onTouch
方法,如下所示:
public boolean onTouch(View arg0, MotionEvent arg1) {
if (arg1.getActionMasked() == MotionEvent.ACTION_UP)
showTimeDialog();
return false;
}