如何在单击时立即禁用按钮

时间:2012-06-14 11:08:16

标签: android button

我有一个按钮,在Click上加载另一个活动,但在它加载另一个Activity之前,如果我连续点击它,那么它会启动活动,但同样的活动会被加载两次或更多次。 我在button.setOnClickListener ... onClick之后很快就尝试了button.setEnabled(false) 但是这并没有禁用按钮,我也会在按下按钮后立即记录文本,因此根据我的水龙头,它会记录文本2或3次,即使我已经轻敲了10次。 我在这里感受到的是,在按钮可以收听点击事件之前,我正在快速点击它,以便在我点击它时多次收听所有这些事件。

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

请帮助

7 个答案:

答案 0 :(得分:7)

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

int flag=1;

 @Override
        public void onClick(View v) 
           {

                if(flag)
                 {
                   button.setEnabled(false);
                   Log.d("ins", "called");
                 }
                flag=0;
            }

答案 1 :(得分:4)

更优选的解决方案是,

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

myWork(){
 //your tasks.
 btn.setEnabled(true);
 btn.setClickable(true);
}

答案 2 :(得分:2)

这可以被视为一个android-bug。您的假设是正确的,即点击事件被系统捕获,如果持续点击可点击,则可能提供得太晚。您可以尝试通过插入boolean这样的

来解决此问题
private boolean handledClick = false;

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

这将确保,即使onClick被触发超过一次,内部代码也只执行一次......

答案 3 :(得分:0)

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

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

答案 4 :(得分: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
            }
        }
    });

答案 5 :(得分: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
              }
      }
};

答案 6 :(得分:0)

请尝试Button.setEnabled(true/false),如下所示:

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (v.isEnabled()) {
                v.setEnabled(false);
            }
        }
    });

您还可以通过拨打Button来检查Button.isEnabled()是否已启用。

有关Button Read This…

的更多信息