我有一个按钮,当用户点击按钮时,我运行一个Thread to do Something。
当用户点击我的按钮很多次时,我有很多线程同时运行。
我如何避免它,当用户多次点击时,我只运行了线程运行。当第一个线程完成时,第二个线程可以运行。
由于
答案 0 :(得分:2)
您是否尝试过:按下按钮后添加myButton.setEnabled(false)
,然后将myButton.setEnabled(true)
添加到主题的末尾。
答案 1 :(得分:2)
你需要保留一个布尔值,表明你已经对点击行动并启动了线程。像这样:
boolean threadStarted = false;
public void onClick(View v) {
if (!threadStarted) {
// start thread here
threadStarted = true;
} else {
// Ignore this spurious click
}
}
注意:在线程完成后不要忘记将布尔值重置为false
答案 2 :(得分:0)
使用asynctask进程。你可以看到this。使用该按钮如果您的ui无法触摸按钮,直到该过程结束。
答案 3 :(得分:0)
在xamarin android中遇到同样的问题。以不同的方式修复它。 Same Idea也适用于Android Java开发人员。
public class SingleClickListener
{
public SingleClickListener(Action<object, EventArgs> setOnClick)
{
_setOnClick = setOnClick;
}
private bool hasClicked;
private Action<object, EventArgs> _setOnClick;
public void OnClick(object v, EventArgs e)
{
if (!hasClicked)
{
_setOnClick(v, e);
hasClicked = true;
}
reset();
}
private void reset()
{
Android.OS.Handler mHandler = new Android.OS.Handler();
mHandler.PostDelayed(new Action(() => { hasClicked = false; }), 500);
}
}