2017-02-22 5 views
-1

У меня есть button в моем activity. Когда я его нажимаю, вызывается следующий метод «ProcessNumbers()». Мне нужна функциональность, «Обработка ...» текст должен быть отображен в textview первой, то loop должны обрабатываться, и когда loop заканчивается через 2-3 секунды, textview должен показать «Обработанные» текст , Но этого не происходит. Когда я нажимаю button, начинается loop, а через 2-3 секунды textview содержит «Обработанный». Почему первый шаг отсутствует, где textview должен содержать «Обработка ...»?Android - Назначение TextView не работает должным образом

private void ProcessNumbers() 
{ 
     TextView textViewProcessNumbers = (TextView) findViewById(R.id.textViewProcessNumbers); 
     textViewProcessNumbers.setText("Processing..."); 

     int k = 0; 
     for (long i = 0; i <= 1000000000; i++) 
     { 
       k = 1; 
     } 

     textViewProcessNumbers.setText("Processed..."); 
} 

Я что-то упустил?

+0

Вместо того, для использования петли TimerTask. – SachinSarawgi

+0

проверить мой ответ ниже –

ответ

0
private void ProcessNumbers() 
{ 
    TextView textViewProcessNumbers = (TextView) findViewById(R.id.textViewProcessNumbers); 
    textViewProcessNumbers.setText("Processing..."); 
    final Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      //Do something after 30000ms 
      textViewProcessNumbers.setText("Processed..."); 
     } 
    }, 30000); 
} 

Использовать обработчик для задержки. Надеюсь, это поможет.

+0

, вы можете легко изменить время с 30000 с помощью любого желаемого. это 30000 в миллисекундах –

+0

Спасибо за ваше решение. Это работает. FOR LOOP Я работаю в приведенном выше примере кода - это просто иллюстрация, в которой работает какая-то бизнес-логика. Когда эта бизнес-логика завершена, текстовое окно должно обновиться с текстом «Обработанный». Поэтому я думаю, что postDelayed не будет работать для меня. Я думаю, что фоновый поток, предложенный «PIOTR ZAWADZKI», будет наилучшим образом подходит для меня. – Daniel

+0

да вы можете использовать AsycTask, но вы не упомянули об этом в своем вопросе. Так что я только что опубликовал код задержки –

0

Вам нужно переместить этот процесс в фоновый поток, например. используя AsyncTask, поскольку textview не будет обновляться до тех пор, пока вы не покинете основной поток. Выполнение длительных операций с потоком пользовательского интерфейса также не рекомендуется, и это может привести к появлению диалогового окна «Приложение не реагировать».

Так 1. Установите метку обработки ... 2. Запустите AsyncTask с процессом 2. Когда AsyncTask заканчивает обновления метки в onPostExecute

+0

Спасибо за ваше решение. Можете ли вы дать мне пример фонового потока AsyncTask? Это было бы очень полезно. – Daniel

+0

Конечно, вы можете проверить образец использования здесь: https://developer.android.com/reference/android/os/AsyncTask.html –

+0

Спасибо за ссылку. – Daniel

0

Вы можете использовать CountDownTimer после поиска текста просмотра Добавить этот код.

new CountDownTimer(30000, 1000) { 

    public void onTick(long millisUntilFinished) { 
     textViewProcessNumbers.setText("Processing..."); 
    } 

    public void onFinish() { 
     textViewProcessNumbers.setText("Processed..."); 
    } 
    }.start(); 

CountDownTimer (длинный millisInFuture, длинные countDownInterval)

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