2015-02-15 4 views
0

У меня есть проблема, что мой Android приложение не задержит в секунду (или 10 секунд), если я использую метод postDelayed ..Android postDelayed не задержит

В основном я хотел бы мою программу ждать одну секунду после того, как Я нажал кнопку, а затем обновил текст в своем текстовом виде («READY»), подождать еще 2 секунды, затем снова обновит текст («SET»), а затем он должен начать еще одно действие (еще не реализовано :-)).

С моим кодом запускается программа, и после того, как я нажму кнопку, текстовое изображение сразу отобразит последний текст («SET»). Это просто не ждет.

Что я делаю неправильно?

Вот мой код:

public class MyCounterActivity extends Activity { 

private long mInternval = 100000; 
private Handler mHandler; 

private Runnable mStatusChecker = new Runnable() { 
    @Override 
    public void run() { 
     //updateInterval(); //change interval 
     startRepeatingTask(); 
    } 
}; 

void startRepeatingTask(){ 
    mHandler.postDelayed(mStatusChecker, mInternval); 
    //mStatusChecker.run(); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_gym_counter); 

    final TextView tv1 = (TextView) findViewById(R.id.fullscreen_content); 
    final Button startButton = (Button) findViewById(R.id.startbutton); 

    startButton.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      final long up; 
      EditText textUp = (EditText) findViewById(R.id.editTextUp);     
      up = Integer.parseInt(textUp.getText().toString()); 

      Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        // 
       } 
      },1000); 
      Log.d("after 1 runnable", "whaaat"); 

      tv1.setText("Ready"); 
      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        // 
       } 
      }, 2000); 

      Log.d("after 2nd runnable", "whaaat 2"); 
      //startRepeatingTask(); 
      tv1.setText("SET"); 
     } 
    }); 
} 

Я также попытался запустить его с runOnUiThread() (в пределах OnClick (View объем), но с с тем же результатом). Я ожидал, что ждать 1 секунду (startRepeatingTask()), а затем запускает цикл и ждет несколько секунд ...

    runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         startRepeatingTask(); 
          for (int u = 0; u < up; u++){ 
           startRepeatingTask(); 
          } 
         } 
        } 
       }); 

надеюсь, что мое описание имеет смысл :-).

Благодарим за помощь!

EDIT: Теперь я смог найти решение для своей первой проблемы. Ответ от @mad на этом посту helpded меня: How to start a different activity with some delay after pressing a button in android? (.! Вот, наверное, то же самое, что @laalto пытался сказать мне спасибо за подсказку)

В OnClick()

  tv1.setText("READY"); 
      mHandler.postDelayed(mDelay1, 2000); 

И то Runnable

private Runnable mDelay1 = new Runnable() { 
    @Override 
    public void run() { 
     if (tv1.getText()=="READY") 
      tv1.setText("SET"); 
    } 
}; 

НО: Если я хочу, чтобы обновить текст на моем TextView после каждого второго, как я могу это сделать? Я не могу просто вызвать mHandler.postDelayed() несколько раз. Любая помощь приветствуется.

ответ

1

Когда вы звоните postDelayed(), он просто помещает Runnable в очередь и немедленно возвращается. Он не ждет выполнения runnable.

Если вам нужно что-то произойти после задержки, поместите код в run() метод runnable.

+0

Я старался соблюдать: частный long mInternval = 100000; частный обработчик mHandler; private Runnable mStatusChecker = new Runnable() { @Override public void run() { mHandler = new Handler(); mHandler.postDelayed (это, mInternval); } }; и в моем коде я начал с этого «mStatusChecker.run();» ... Но он все еще не задерживается. Или я понял, что вы не правы? Спасибо за помощь! –

+0

Вызов 'run()' в runnable запускает код немедленно и синхронно. Повторная отправка самого runnable без каких-либо дополнительных операций не делает ничего полезного. – laalto

+0

Извините, но я не понимаю, что вы говорите: - \. Можете ли вы привести мне пример? Большое спасибо. –

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