2013-08-26 3 views
0

Я хочу сделать что-то очень простое. У меня есть индикатор выполнения и текстовый элемент, который я хочу динамически обновлять при нажатии кнопки, но более одного раза во время вызова функции.Обновление TextView в одной функции

Я хочу, чтобы он изменился на «A», а затем на секунду, затем переключитесь на «B» ... например.

Я понимаю, что моя функция блокирует UI/основной поток, что является то, что если я setText() десять раз, я вижу только, когда появляется десятый текст, когда функция завершается.

Так что я пытался обработать обработчики/runnables в потоке пользовательского интерфейса, недействительные (и postInvalidating), чтобы стимулировать обновление и runOnUiThread(), и все они просто обновляются, когда они закончили работать, оставив меня только с конечным состоянием.

public void requestPoint(View v) { 
    textProgress.setText("Requesting A Point"); 
    waiting(200); 
    progressBar.setProgress(5); 
    textProgress.setText("Request Received!"); 
    waiting(500); 
    .... 
} 

Я думаю, что я повернул почти все подобные ссылки вопроса фиолетовыми и впустую слишком много времени на этой простой вещи (хотя я узнал много о резьбе на Android), но я чувствую, что должно быть что-то не хватаю Это не похоже на эту сложную задачу.

Любая помощь была бы принята с благодарностью.

+0

Как можно «ждать»() 'wait, не блокируя текущий поток? –

+0

Он делает мое плохое. Ожидание просто тратит время на цикл – Avarice

+0

Вы пытались использовать таймер или asyncTask? – gian1200

ответ

0

Предполагая, что вы действительно хотите просто потратить время на свой метод ожидания. Это предполагает 200 мс задержки, за которой следует 500 мс задержки, как в вашем примере.

public void requestPoint(View v) { 
    textProgress.setText("Requesting A Point"); 
    handler.postDelayed(new Runnable(){ 
     public void run(){ 
      progressBar.setProgress(5); 
      textProgress.setText("Request Received!"); 
     } 
    }, 200); 

    handler.postDelayed(new Runnable(){ 
     public void run(){ 
      .... 
     } 
    }, 700); 
.... 
} 
+0

Это работает! Я попытался сделать то же самое, но с повторно используемым runnable, который написал из общедоступных переменных, а затем установил их в следующее, но безрезультатно. Спасибо, что помогли мне, я потратил слишком много времени на то, чтобы попробовать разные вещи, прежде чем работать. – Avarice

+0

Также для будущих читателей есть опечатка: postDelayed (Runnable, int) not postDelayed (int, Runnable) – Avarice

+0

Упс, исправлено. – Tenfour04

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