0

我有一个按钮,当用户点击按钮时,我运行一个线程来做某事。

当用户多次点击我的按钮时,我有许多线程同时运行。

我怎样才能避免它,当用户多次点击时,我只运行线程运行。当第一个线程完成时,第二个线程可以运行。

谢谢

4

4 回答 4

2

您是否尝试过:myButton.setEnabled(false)按下按钮时添加,然后添加myButton.setEnabled(true)到线程的末尾。

于 2012-08-03T10:05:26.173 回答
2

您需要保留一个布尔值,表明您已对点击采取行动并启动了线程。像这样的东西:

boolean threadStarted = false;

public void onClick(View v) {
    if (!threadStarted) {
        // start thread here
        threadStarted = true;
    } else {
        // Ignore this spurious click
    }
}

注意:不要忘记在线程完成后将布尔值重置为 false

于 2012-08-03T10:09:16.980 回答
0

使用 asynctask 进行处理。你可以看到这个。使用如果按下按钮,一旦您的用户界面将无法触摸,直到该过程结束。

于 2012-08-03T10:07:46.710 回答
0

在 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);
    }
}
于 2014-08-26T12:24:18.227 回答