Ваш 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()замінює весь "віджет" текстом, який ви наказали йому встановити; Включаючи текст, який ви вже там помістили.