我有一个简单的AlertDialog,它响应同时按下的多个按钮。例如,有一个Yes和No按钮,如果用户使用两个手指同时按下两个,则触发yes和no OnClickListeners并运行代码。我已经看到提到android:splitMotionEvents =" false",但我只使用默认的AlertBuilder而没有任何添加的视图,并且它没有显示有办法设置它。我可以尝试创建一个时间戳,但这似乎是一个黑客攻击,我希望Android代码中会有一些东西可以处理。
这是我的代码:
AlertDialog.Builder builder = new AlertDialog.Builder(TestActivity.this);
builder.setTitle(R.string.title)
.setMessage(getString(R.string.message))
.setCancelable(false)
.setPositiveButton(R.string.yes, new android.content.DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
runTest(false);
}
})
.setNeutralButton(R.string.no, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
runTest(true);
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// do nothing
}
});
AlertDialog dialog = builder.create();
答案 0 :(得分:3)
我觉得你有这个对话框的样式资源
添加
<item name="android:splitMotionEvents">false</item>
到您的对话框样式。它将阻止使用它的所有对话框的多点触控。
答案 1 :(得分:2)
最简单的方法是声明一个静态变量,使用此变量来跟踪您想要解决的按钮的按下,并简单地检查按下的当前按钮是否等于存储的状态。
答案 2 :(得分:2)
使用字段变量,如:
boolean isWorking = false;
然后将其集成到所有onClickListeners
中,以确保在执行另一个.setPositiveButton(R.string.yes, new android.content.DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (!isWorking) {
isWorking = true;
runTest(false);
}
}
})
时它们不会执行
...
System.setProperty("webdriver.gecko.driver", "test\\resources\\geckodriver.exe");
driver =new FirefoxDriver();
...
答案 3 :(得分:1)
它必须在点击按钮的顺序中一个接一个地运行。如果你已完成警报对话框的任务,那么你必须在按钮点击时关闭它,如果你在点击上做了一些任务而不想关闭它,那么使用进度条使用户无法点击其他按钮,直到以前的方法已经完成。