2013-04-29 2 views
1

Я знаю, как отключить кнопку, чтобы она не была дважды нажата. Однако, если я хочу снова включить его, как только его сейф может сделать что-то вроде этого, когда я вызываю setenabled (true) в onclick ?? Отключена ли кнопка, как только вызывается setenabled (false), или отключается только после завершения функции onclick?Кнопки android и как они работают

button.setOnclickListener(new View.onClickListener(){ 

      public void onClick(View v) { 
       button.setEnabled(false); 
       /// do stuff 
       button.setEnabled(true); 
      } 
    }); 
+0

Да. вы можете это сделать. Вместо «кнопки» используйте «v» (View v). Откроется обратная функция функции переопределения, которая нажата. –

+0

вы хотите, чтобы ваша кнопка нажала один раз или twise – Unknown

ответ

3

Почему бы не сделать проще?

Используйте флаг boolean в качестве флага для проверки при запуске процесса. И если он запущен, не запускайте его, пока предыдущий процесс не завершится.

Приведенный ниже пример кода гарантирует, что при выполнении задачи onClickListener() просто не будет запускаться. Не нужно беспокоиться об отключении, а затем снова включать его.

EDIT:

После продолжительного обсуждения (в комментариях), с Zabri. Просто для ударов я попробовал решение, которое я изначально разместил. И, как выясняется, он был в порядке в конце концов. :-(

я неправильно в исходном растворе (который был тестировался, но б ого-го ко мне). Так что время, чтобы всасывать и опубликовать работу и испытания решения.

Полного реквизит для Zabri для указывая на очевидный недостаток в коде :-)

Например (ПРОВЕРЕНО кОД):.

boolean taskRunning = false; 
button1.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 

     if (taskRunning == false) { 

      // TOGGLE THE boolean HERE TO INDICATE RUNNING 
      taskRunning = true; 

      ///do stuff 

      // TOGGLE THE boolean HERE TO INDICATE TASK COMPLETED 
      taskRunning = false; 

     } 

    } 
}); 

Как уже упоминалось, это непроверенный код. Я просто напечатал его здесь.

+2

Да, это гораздо более простое решение. – Lucifer

+1

Не только это не простое решение, я даже не думаю, что это сработает. 'TaskRunning' является _false_ в начале. Таким образом, 'OnClickListener' устанавливается в' button'. Когда нажата кнопка «кнопка», что мешает ей снова нажать? 'OnClickListener' все еще установлен. Поправьте меня если я ошибаюсь. – zbr

+0

Кроме того, вместо записи 'if (something == true)', вы можете просто написать 'if (something)'. – zbr

Смежные вопросы