Ваш onCreate()
метод має кілька величезних недоліків:
1) onCreate
готує Вашу Діяльність - тому нічого, що Ви тут робите, не стане видимим для користувача, поки цей метод не закінчиться! Наприклад - ви ніколи не зможете змінити TextView
текст тексту тут більше, ніж ОДИН раз, оскільки лише остання зміна буде намальована і, таким чином, видима для користувача!
2) Майте на увазі, що програма Android - за замовчуванням працюватиме лише в ОДНОМУ потоці! Отже: ніколи не використовуйте Thread.sleep()
або не використовуйте Thread.wait()
у своєму головному потоці, який відповідає за ваш інтерфейс! (читайте "Тримайте додаток чуйним" для отримання додаткової інформації !)
Ваша ініціалізація Вашої активності:
- без жодної причини ви створюєте новий
TextView
об'єктt
!
- ви виберете свій макет
TextView
у змінній t
пізніше.
- ви встановлюєте текст
t
(але майте на увазі: він відображатиметься лише після onCreate()
закінчення та запуску основного циклу подій вашої програми!)
- ви чекаєте 10 секунд у вашому
onCreate
методі - цього ніколи не можна робити, оскільки це зупиняє всю активність інтерфейсу користувача і, безумовно, примушує ANR (додаток не відповідає, див. посилання вище!)
- тоді ви встановлюєте інший текст - цей відображатиметься, як тільки ваш
onCreate()
метод закінчиться і буде оброблено кілька інших методів життєвого циклу Activity !
Рішення:
Встановіть текст лише один раз onCreate()
- це повинен бути перший текст, який повинен бути видимим.
Створіть a Runnable
та aHandler
private final Runnable mUpdateUITimerTask = new Runnable() {
public void run() {
// do whatever you want to change here, like:
t.setText("Second text to display!");
}
};
private final Handler mHandler = new Handler();
встановити цей запущений як обробник, можливо в onCreate()
(але прочитайте мою пораду нижче):
// run the mUpdateUITimerTask's run() method in 10 seconds from now
mHandler.postDelayed(mUpdateUITimerTask, 10 * 1000);
Порада: будьте впевнені, що знаєте Activity
життєвий цикл Росії! Якщо ви робите подібні речі, onCreate()
це відбуватиметься лише тоді, коли ваша програма Activity
буде створена вперше ! Android, можливо, триматиме вас Activity
живими протягом тривалого періоду часу, навіть якщо цього не видно! Коли користувач знову "запускає" його - і він все ще існує - ви більше не побачите свій перший текст!
=> Завжди встановлюйте обробники onResume()
та вимикайте їх onPause()
! В іншому випадку ви отримаєте "оновлення", коли ваше Activity
взагалі не видно! У вашому випадку, якщо ви хочете побачити свій перший текст знову, коли він буде повторно активований, ви повинні встановити його onResume()
, а не onCreate()
!
.setText()
замінює весь "віджет" текстом, який ви наказали йому встановити; Включаючи текст, який ви вже там помістили.