防止在AlertDialog上按下多个按钮

时间:2017-04-07 13:44:32

标签: android alertdialog

我有一个简单的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();

4 个答案:

答案 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)

它必须在点击按钮的顺序中一个接一个地运行。如果你已完成警报对话框的任务,那么你必须在按钮点击时关闭它,如果你在点击上做了一些任务而不想关闭它,那么使用进度条使用户无法点击其他按钮,直到以前的方法已经完成。