6

我有一个按钮,单击时会加载另一个活动,但在它加载另一个活动之前,如果我连续点击它,它会启动该活动,但相同的活动会加载两次或更多次。我在 button.setOnClickListener...onClick 之后不久尝试了 button.setEnabled(false) 但这并没有禁用按钮,我也在点击按钮后立即记录文本,因此根据我的点击它会记录文本 2或 3 次,即使我已经点击了 10 次。我在这里的感觉是在按钮可以收听点击事件之前,我点击它的速度非常快,以至于它在我点击它时会多次收听所有这些事件。

因此,我需要一些按钮可以只听一击然后禁用它的东西。

请帮忙

4

7 回答 7

7

它的已知问题。基本上你可以设置标志。

int flag=1;

 @Override
        public void onClick(View v) 
           {

                if(flag)
                 {
                   button.setEnabled(false);
                   Log.d("ins", "called");
                 }
                flag=0;
            }
于 2012-06-14T11:17:49.487 回答
4

更优选的解决方案是,

onclick(){
  btn.setEnabled(false);
  btn.setClickable(false);
  //yourwork
  myWork();
}

myWork(){
 //your tasks.
 btn.setEnabled(true);
 btn.setClickable(true);
}
于 2013-09-17T23:54:24.810 回答
2

这可以被认为是一个android-bug。您的假设是正确的,即单击事件被系统捕获,并且如果连续单击可单击事件,则可能为时已晚。您可以尝试通过插入这样的boolean值来解决此问题

private boolean handledClick = false;

public void onClick(View v){
    if (!handledClick){
        handledClick = true;
        startActivity(...);
    }
}

这将确保即使onClick多次触发,内部的代码也只会执行一次......

于 2012-06-14T11:17:02.573 回答
0

我也有类似的问题,但我能够onClick()通过使用按钮的 button.setEnabled(false) 在侦听器的回调方法中禁用按钮。onResume()我在,onRestart()onWindowFocusChanged()具有该按钮的活动中启用按钮。

我认为这是禁止用户(连续)点击按钮的方法之一。

于 2012-06-14T11:15:39.987 回答
0

如果 go 指的是你需要的按钮,

 go.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
    //    your code here
          go.setEnabled(false);
        }
    });

编辑:既然它还在排队,怎么样。

s.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            s.setEnabled(false);
            if(flag == 1){
                flag=0;
                //your code here
            }
        }
    });
于 2012-06-14T11:16:35.697 回答
0

我也有同样的问题,这就是我解决它的方法:

int flag = 1;

 private OnClickListener btnNextActivity = new OnClickListener(){
    public void onClick(View v) {

            if(flag){
          Intent nextActivity = new Intent(getApplicationContext(),NextActivity.class);
          nextActivity.setClassName(". . .",". . ." );
          . . .
          startActivity(nextActivity);
          flag = 0;
            }

           else{
            Show Toast Message Here
              }
      }
};
于 2012-06-14T11:33:58.527 回答
0
于 2016-01-28T06:43:22.437 回答