2012-06-19 5 views
0

настроить слушателя событий, например: setOnClickListener как этотобнаружения таймаута для eventlisteners в Android

Button stopBtn = (Button)findViewById(R.id.stop); 
    stopBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      doMagic(); 
     } 
    }); 

Я хотел бы установить этот слушатель события тайм-аут на 10 секунд, если кнопка не нажата. Случай использования: у меня есть button1, который активирует этот прослушиватель stopBtn на 10 секунд, и если время ожидания приходит, оно деактивируется, и мне нужно нажать button1, чтобы снова активировать stopBtn.

Im вероятно, делают это неправильно:

final Handler myHandler = new Handler(); 
    startBtn = (Button)findViewById(R.id.start); 
    myHandler.postDelayed(new Runnable() { 
     public void run() { 
      startBtn.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Log.i(TAG,"runned"); 
       } 
      }); 
     } 
    }, 10000); 

После 10s им все еще в состоянии нажать, и что, вероятно, сое слушатель события еще прилагается. Как я могу отделить его, даже если я не знаю, его уволили или нет.

ответ

1

delayed Runnable размещен на Хэндлер может управлять этим:

myHandler.postDelayed(new Runnable() { 
public void run() { 
    if(something happened) { 
    // magic work 
    } else { 
    // turn off the event 
    } 
} 
, 10000); 

Вы можете инициализировать Handler как переменную экземпляра, используя этот код:

final Handler myHandler = new Handler(); 
+0

Спасибо, у меня все еще есть проблемы, обновленный мой вопрос. – rskuja

+0

Вы можете изменить прослушиватель на новый (возможно, пустой или любой другой) – Tim

1

Задержки действия могут быть организованы с помощью Handler. В частности, проверьте 2 метода: postAtTime(Runnable, long) и postDelayed(Runnable, long).

Легко создать Handler, просто используйте его конструктор по умолчанию Handler handler = new Handler() в пределах Activity.onCreate(Bundle state). Затем заверните свое желаемое действие в Runnable и перейдите к обработчику.

+0

О, когда я писал это 'Tim Messerschmidt', он уже опубликовал почти такой же совет. :) –

+0

:) Еще стоит upvote! – Tim

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