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

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

需要帮忙。谢谢

4

3 回答 3

4

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

布尔点击=假;

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

当你从睡眠中返回时,设置 clicked = false。

于 2012-07-17T10:47:17.187 回答
0

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

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;
        }
    }   
});
于 2012-07-17T10:49:19.073 回答
0

最好将AsyncTask用于您的工作。并使用适合您要求的get()方法。AsyncTask

execute() AsyncTask假设在等待之后按钮的单击和禁用按钮get()将在AsyncTaskAsyncTaskResult完成时返回,而在 Result 上再次启用您的按钮。所以你可以避免ANR在你的活动中。

于 2012-07-17T10:49:06.593 回答