2009-07-30 13 views
6

Etkinliğimi başlatan ve intens'in putExtra() işlevini kullanarak bir iletiyi geçiren bir bildirim aldım. Mesaj daha sonra aktivitenin onCreate fonksiyonunda kullanıcıya gösterilir. Uygulama bir yönelim değişikliğinden dolayı yeniden başlatıldığında, mesaj yine de niyetin paketlenmiş verilerinde olduğu için tekrar gösterilir.Bir etkinlik oryantasyon değişikliğinden sonra yeniden oluşturulmadan önce intent bundle verilerini değiştirin

Ek verileri nasıl kaldırabilirim?

Bundle bundle = getIntent().getExtras(); 
if (bundle.getBoolean("showMessage")) { 
    // ... show message that is in bundle.getString("message") 
    // remove message 
    bundle.remove("showMessage"); 
} 

Ama yönelim değişti sonra mesajı hala gösterilir, kullanılan niyet gibi görünüyor Değiştim bir, ama orijinal biri değil:

Aşağıdaki çalıştı. Bulduğum tek geçici çözüm, showMessage'ı nSaveInstanceState()'a ek olarak kaydetmektir. Başka bir yolu var mı? Yoksa bu yol mu?

cevap

20

(basit) bir çözümdür:

yerine çağıran

bundle.remove("showMessage"); 

şimdi beklendiği gibi çalıştığını

getIntent().removeExtra("showMessage"); 

kullanın. GetIntent() gibi görünüyor. GetExtras() bir referans değil, bir kopya döndürür.

+0

Üzgünüm, -1. onSaveInstanceState, @CommonsWare tarafından belirtildiği gibi bunu yapmak için doğru yoldur. –

9

onSaveInstanceState() yaklaşımınız doğru cevap AFAIK.

İlgili konular