SORU
19 ŞUBAT 2010, Cuma


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
24 ŞUBAT 2010, ÇARŞAMBA


onCreate() yöntem birkaç büyük kusurları vardır:

1) onCreatehazı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şken t 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 saniyeonCreate 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:

  1. Metin sadece bir kez onCreate() - Bu görünür olmalı ilk metin olması gerekir.

  2. Runnable Handler bir oluşturun

    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();
    
  3. 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!

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jared Busch

    Jared Busch

    25 Mayıs 2011
  • Jonathan Leack

    Jonathan Lea

    26 ŞUBAT 2007
  • TheScorpioTechno

    TheScorpioTe

    15 Aralık 2010