【问题标题】:Prevent double click on OnClickListener防止双击 OnClickListener
【发布时间】:2019-02-05 23:35:15
【问题描述】:
我试图阻止用户点击我的按钮两次。我试图在我的脚本上使用setEnabled,但没有任何反应!我的问题是,我尝试在setOnClickListener 中执行此操作。
有人可以帮我找到一个解决方案,以防止在所有内容上传到服务器时点击吗?
newPostBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// I want to set my button to enabled false here
}
}
【问题讨论】:
标签:
java
android
button
onclicklistener
double-click
【解决方案1】:
1) 创建一个实例变量:
private int buttonClicks;
2) 在 onCreate 中实例化你的变量
buttonClicks = 0;
3) 在 onClickListener 中设置 if() 语句
newPostBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (buttonClicks == 1){
buttonClicks = 0;
//do nothing
} else {
//run code
}
buttonClicks++;
【解决方案2】:
为什么不使用setOnAction?
newPostBtn.setOnAction(e -> {
(your logic goes here)
newPostBtn.setEnabled(false);
}) ;
【解决方案3】:
以下是解决此问题的三种方法:
禁用带有setEnabled(false) 的按钮,直到用户再次单击它是安全的。
Above给定的解决方案也是一种解决方法。
另一种解决方案是
private long lastClickTime = 0;
View.OnClickListener buttonHandler = new View.OnClickListener() {
public void onClick(View v) {
// preventing double, using threshold of 1000 ms
if (SystemClock.elapsedRealtime() - lastClickTime < 1000){
return;
}
lastClickTime = SystemClock.elapsedRealtime();
}
}
【解决方案4】:
有时下一个屏幕/操作需要时间来执行,并且频繁点击或点击视图会多次执行下一个屏幕/操作。我通过计算两次点击之间的时间解决了这个问题。请在下面找到代码示例:
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// mis-clicking prevention, using threshold of 1000 ms
if (SystemClock.elapsedRealtime() - mLastClickTime < 1000){
return;
}
mLastClickTime = SystemClock.elapsedRealtime();
// do your action here
}
}
【解决方案5】:
你也可以试试setClickable
在 Android 中,不可点击的小部件不会响应点击事件
view.setClickable(false);
newPostBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
v.setClickable(false);
// I want to set my button to enabled false here
}}