2012-05-04 2 views
1

Я хочу изменить некоторые значения onBackPressed метод ... И я переопределить это следующим образом:Обработчик postDelayed не публикует сообщения о задержке?

@Override 
public void onBackPressed() { 

      final Handler backHandler = new Handler(); 
      backHandler.postDelayed(new Runnable() { 
       public void run() { 
        exitCount = 0; 
        Log.d("exitCount", "exitCount: " + exitCount); 
       } 
      }, Toast.LENGTH_SHORT); 

} 

Но проблема в обработчик сообщения сразу ... Там нет никакой задержки. Где я делаю неправильно? Извините, если это хромой вопрос, я довольно новичок в Android. Заранее спасибо.

ответ

2

Это потому, что Toast.LENGTH_SHORT значение равно нулю. Попробуйте объявить свою константу с выбранным значением задержки. см. here

+0

Но мне нужно, чтобы он точно застал Toast.LENGTH_SHORT, вы знаете, как это такое миллис? – yahya

+0

Нашел его, попробовав некоторые :) 2000 millis работает просто отлично :) Большое спасибо. – yahya

+0

2 секунды я думаю. Но это может измениться с помощью андроида – Blackbelt

1

Сделать обработчик частью действия (или части потока, в котором вы отправляете сообщение, если оно не для потока пользовательского интерфейса), и использовать миллисекундную задержку, а не Toast.LENGTH_SHORT, которая имеет значение 0 так что это произойдет мгновенно.

public class SomeActivity extends Activity { 
    private Handler mHandler = new Handler(); 

    @Override 
    public void onBackPressed() { 
     mHandler.postDelayed(new Runnable() { 

      @Override 
      public void run() { 
       Log.d("tag", "Hello, Handler!"); 
      } 
     }, 1000); // one second 
    } 
} 
0

Использовать код belo Надеюсь, он сработает.

runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 
       backHandler.postDelayed(new Runnable() { 
       public void run() { 
        exitCount = 0; 
        Log.d("exitCount", "exitCount: " + exitCount); 
       } 
      }, Toast.LENGTH_SHORT); 
      } 
     });