我试图阻止用户点击我的按钮两次。我尝试在我的脚本上使用setEnabled
但没有任何反应!我的问题是,我试图在setOnClickListener
这样做。
有人可以帮我找到一个解决方案,以防止一切都被上传到服务器时点击?
newPostBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// I want to set my button to enabled false here
}
}
为什么不使用setOnAction
?
newPostBtn.setOnAction(e -> {
(your logic goes here)
newPostBtn.setEnabled(false);
}) ;
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++;
以下是解决此问题的三种方法:
使用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();
}
}
有时,下一个屏幕/操作需要花费时间来执行,并且频繁点击或点击视图会多次执行下一个屏幕/操作。我通过计算两次点击之间的时间来解决此问题。请在下面找到代码示例:
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
}
}
您也可以尝试使用setClickable
在Android中,无法点击的窗口小部件不会响应点击事件
view.setClickable(假);
newPostBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
v.setClickable(false);
// I want to set my button to enabled false here
}}