我有一个按钮,当用户点击按钮时,我运行一个线程来做某事。
当用户多次点击我的按钮时,我有许多线程同时运行。
我怎样才能避免它,当用户多次点击时,我只运行线程运行。当第一个线程完成时,第二个线程可以运行。
谢谢
我有一个按钮,当用户点击按钮时,我运行一个线程来做某事。
当用户多次点击我的按钮时,我有许多线程同时运行。
我怎样才能避免它,当用户多次点击时,我只运行线程运行。当第一个线程完成时,第二个线程可以运行。
谢谢
您是否尝试过:myButton.setEnabled(false)
按下按钮时添加,然后添加myButton.setEnabled(true)
到线程的末尾。
您需要保留一个布尔值,表明您已对点击采取行动并启动了线程。像这样的东西:
boolean threadStarted = false;
public void onClick(View v) {
if (!threadStarted) {
// start thread here
threadStarted = true;
} else {
// Ignore this spurious click
}
}
注意:不要忘记在线程完成后将布尔值重置为 false
使用 asynctask 进行处理。你可以看到这个。使用如果按下按钮,一旦您的用户界面将无法触摸,直到该过程结束。
在 xamarin android 中面临同样的问题。以不同的方式修复它。同样的想法也适用于 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);
}
}