nasıl Android TextView içinde metin değiştirmek için
Bunu yapmak için çalıştım
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
t=new TextView(this);
t=(TextView)findViewById(R.id.TextView01);
t.setText("Step One: blast egg");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
t.setText("Step Two: fry egg");
ama nedense, sadece ikinci metin çalıştırdığımda gösterir. Bir şey Thread.sleep()
yöntemi engelleme ile ilgisi olabileceğini düşünüyorum. Yani birisi bir zamanlayıcı nasıl bana gösterebilir "uyumsuz"?
Teşekkürler.
CEVAP
onCreate()
yöntem birkaç büyük kusurları vardır:
1) onCreate
hazırlarEtkinlik yapacağın çok şey yapılacaktırgörünürbu yöntem kadar kullanıcı bitirir! Örneğin - hiç değiştirmek mümkün olacak TextView
'In metin burada . daha fazla ^strong>BİRzaman olarak sadece son değişikliği ve kullanıcıya görünür böylece çekilecek!
2) Android program varsayılan olarak çalıştırılacak unutmayınBİRiplik! Bu nedenle: asla UI sorumlu olan ana iş parçacığı Thread.sleep()
Thread.wait()
kullanın! (daha fazla bilgi için "Keep your App Responsive" okuyun!)
Ne seninbaşlatmaAktivite yok
- sebepsiz yere* *10 yeni bir nesne
t
oluşturun! - düzeni
TextView
değişkent
daha sonra alırsın. - (ama unutmayın: sadece . görüntülenir
t
metni ayarlayın ^strong>sonraonCreate()
bitirir ve uygulamaya çalıştığı ana olay döngü!) - bekleyin10 saniye
onCreate
yöntem içinde buasla yapılmalıdırtüm UI aktivite durur ve kesinlikle bir ANR (Uygulama Yanıt vermiyor, yukarıdaki bağlantıya bakın!) zorlayacak gibi - sonra başka bir metin ayarlayın -
onCreate()
yöntemi tamamlanır tamamlanmaz görüntülenir ve Activity lifecycle birçok diğer yöntemleri işlendi!
Çözüm:
Metin sadece bir kez
onCreate()
- Bu görünür olmalı ilk metin olması gerekir.Runnable
Handler
bir oluşturunprivate 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();
bir işleyici olarak çalıştırılabilir yüklemek,
onCreate()
Olası (ama aşağıda benim tavsiyem okuyun):// run the mUpdateUITimerTask's run() method in 10 seconds from now mHandler.postDelayed(mUpdateUITimerTask, 10 * 1000);
Tavsiye: Activity
'In ömrü! bildiğinizden emin olun Eğer onCreate()
Bu sadece senin ne zaman olacak böyle şeyler yaparsan Activity
oluşturulurilkzaman! Android muhtemelen eğer görünür değilse bile uzun bir süre için Activity
canlı tutun!
Bir kullanıcı ne zaman "ile başlayan" yeniden - ve hala mevcut - ilk metin artık göremez!
=>Her zaman onResume()
işleyicileri yükleme ve onPause()
bunları devre dışı bırakın! Aksi takdirde" Activity
tüm görünür değildir! "güncellemeleri alacak
Eğer tekrar aktif hale geldiğinde ilk metni tekrar görmek istiyorsan senin durumunda, onResume()
, onCreate()
değil ayarlamanız gerekir!
Nasıl Android TextView fontFamily deği...
Yüce Metin içinde sekme ile dört boşlu...
Nasıl kalın yazı tipi stilini ayarlama...
Nasıl bir Android TextView içinde bir ...
Android - Nasıl dinamik olarak değişti...