Android 按钮停止执行新操作 utill onClick() 块执行完成


    b.setOnClickListener(new OnClickListener()) {
    public void onClick(View arg0) {
        try{
         Thread.sleep(10000);
       }catch(Exception e){}
     }   
  });

上面的代码中,在 Therad 工作之前,我不想再采取任何按钮操作。目前,当我一次又一次地按下应用程序要求强制关闭或等待时。我不希望这样,而是我不喜欢再对此按钮执行操作。

需要帮助。谢谢

添加一个全局布尔值,并在单击它时将其设置为 true。在按钮单击中检查它。如果已设置,则返回,否则运行线程。在线程结束时,再次将其设置为 false。

单击布尔值 = 假;

b.setOnClickListener(new OnClickListener()) {
    public void onClick(View arg0) {
        if( clicked )
            return;
        try{
         clicked = true;
         Thread.sleep(10000);
       }catch(Exception e){}
     }   
  });

设置单击=当您从睡眠状态返回时为假。

最好将 AsyncTask 用于您的作品。并根据您的要求使用get() AsyncTask方法。

假设在按钮的单击execute() AsyncTask并在等待get()后禁用按钮AsyncTask,这将在 AsyncTask 完成后返回Result,而在结果上只需再次启用您的按钮。因此,您可以避免在"活动"中出现ANR

在处理前一种点击时,至少有两种方法可以阻止进一步的点击:

1(在开始时禁用按钮,并在onClick结束时重新启用:

b.setOnClickListener(new OnClickListener()) {
    public void onClick(View arg0) {
        b.setEnabled(false);
        //do your stuff
        b.setEnabled(true);
    }   
});

2(在onClick的开头设置一个标志,并在最后清除它:

(班级级别(

boolean isInOnClick = false;

然后

b.setOnClickListener(new OnClickListener()) {
    public void onClick(View arg0) {
        if(!isInOnClick) {
            isInOnClick = true;
            //do your stuff
            isInOnClick = false;
        }
    }   
});

最新更新