英文:
Android - Cannot setClickable(false) a button after click
问题
我有一个像开关一样的按钮,在点击后我尝试使用setClickable(false),以便只处理第一次点击(防止意外的双击/多次点击)。
这里有一个类似的代码:
Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Button.setClickable(false);
//执行其他操作
}
});
然后最终,我在某个地方的代码会根据状态变量将可点击性重置为true,这样我就可以关闭按钮。
问题是,当我非常快速地点击按钮时,似乎后续的点击仍然被处理。
setClickable() 有延迟效果吗?
此外,我已经阅读了使用setEnabled(false) 的方法,但在我的情况下我不能使用它。我需要按钮仍然保持启用状态,但不能点击。
英文:
I have a button like a switch where I am trying to setClickable(false) after I click it so that only the first click will be handled
(additional clicks are ignored in the case of accidental double-clicks/multiple-clicks).
Here is a similar code:
Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Button.setClickable(false);
//do other things
}
});
Then eventually, I have a code somewhere where I will reset the clickable to true, depending on a state variable, so I can switch-off.
The problem is when I click the button very quickly, it seems the succeeding clicks are still handled.
Is there a delay to the effects of setClickable()?
Also, I have read about using setEnabled(false) instead, but I cannot use it in my case. I need the button to still be enabled but not clickable.
答案1
得分: 1
根据您的评论,您可能需要类似这样的代码:
Boolean SWITCH_ON = false;
Button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (!SWITCH_ON) {
SWITCH_ON = true;
}
}
});
Button.setOnLongClickListener(new View.OnLongClickListener() {
public boolean onLongClick(View v) {
if (SWITCH_ON) {
// 在这里执行长按时的任务...SWITCH_ON
}
return true;
}
});
英文:
Judging from your comment you probably need something like this.
Boolean SWITCH_ON = false;
Button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(!SWITCH_ON ){
SWITCH_ON = true;
}
}
});
Button.setOnLongClickListener(new View.OnLongClickListener() {
public boolean onLongClick(View v) {
if(SWITCH_ON ){
// do your task for long click here ...SWITCH_ON
}
return true;
}
});
答案2
得分: 0
你可以在你的onClick
方法中使用button.setEnabled(false);
来禁用按钮。
禁用的按钮不会触发onClick
方法,当需要时你可以使用button.setEnabled(true);
来重新启用它。
英文:
You can use button.setEnabled(false);
within your onClick
method to disable the button.
Disabled buttons don't trigger the onClick
method, and you can easily re-enable it with button.setEnabled(true);
when needed.
答案3
得分: 0
你可以添加另一个名为buttonEnabled的变量,或者其他类似的名称,并将其初始化为true。然后在点击事件中执行以下操作:
Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Button.setClickable(false);
if(buttonEnabled) {
//执行其他操作
}
buttonEnabled = false;
}
});
注意,如果你想要重新激活它,需要改变变量的值。
英文:
You could add another variable named buttonEnabled or so and initialize it with true. Then in the onclick do this:
Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Button.setClickable(false);
if(buttonEnabled) {
//do other things
}
buttonEnabled = false;
}
});
Note that you need to change the variable to if you want to reactivate it
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论