18

yeniden yarattı. Her şey yolunda gayet iyi. Şimdi, Uygulamadan ayrılırsam, sistem benim Faaliyetimi öldürmediği sürece her şey yolundadır (ya da bunu DDMS'deki durdurma düğmesiyle yapıyorum). Eğer böyle bir şey olmuyorsa ve Etkinliğim öldürülüyorsa. onDestroy denir. Benim Uygulamasını yeniden açtığınızdafragmanlar Etkinlik olsun öldürdü sonra kalan ve ben koduna göre Fragments oluşturup FrameLayouts içine koymak bir FragmentActivity (Destek fragmanlar) sahip

Yani Fragmanlar varlığını sürdürmeye devam eder ve onlar işlerini yapmak için denemek çünkü NullPointerExeptions olsun. Fragmanlar App bu durumda mevcut olması gerekiyordu, bu yüzden benim için sorun.

Onları böylece orada onları koymak ve() bunlardan kurtulmak için popBackStack çağrı edemem yok backStack içinde gerek yoktur.

nasıl onCreate() benim FragmentManager sıfırlayabilirsiniz ya da sadece parçalar da yok olsun emin olun? Aynı sorun, ama bir süre önce I fragmanı yaşam döngüsü yöntemleri olarak adlandırılan ve problem parçası yöneticisi ile oldu asla bir viewpager içinde parçaları ile ilgili bir sorun olsaydı

+0

Bunun için bir çözüm buldunuz mu? – Henry

cevap

0

emin değilim.

Yani, yerine supportFragmentManager ait childFragmentManager kullanarak deneyebilir ve bütçenin Sorunun çözülüp çözülmediğini görmek.

+0

Etkinliğiniz öldürülürse, onDestroy aranır. Ve faaliyetinizin öldüğü zaman, parçaların onunla gittiğinden eminim. Aktivitenizin öldüğünü düşünmenizi sağlayan şey nedir? Fragmanlarınıza referans veren hiçbir şey olmadığından emin misiniz? – Christine

+0

Sorun, onDestroy'un kesin olarak çağrılmadığıdır. Fakat onCreate denildiğinde, imha edildiğini biliyorum. Bütün referanslarım yok edilen aktivitede, yani hayır. – Towlie288

+0

Kesinlikle denemek için onDestroy() 'a güvenemezsiniz, ve onDestroy()' un tamamlanmasını önlemek için yönetim gibi olası yan etkileri vardır. Bir karışıklık olabilir –

2

Bu aslında normal olabilir. Çok sayıda Fragmanı örneklendirmek ve yok etmek yerine, Android onları etrafta tutabilir. Bu özellikle ViewPagers ile olur.

Çok sayıda getActivity() çağrısı veya bağlamı almak için çağrı yapıyor musunuz? Eğer öyleyse, boş başka ipucu AsyncTasks için dikkat etmek olacaktır

Activity activity = getActivity(); 
if (activity == null) 
{ 
    Log.w("activity null!", "This will cause a crash if you access this variable!"); 
} 

gibi basit bir şey yaparak getActivity() çağrısını kontrol edin. Eğer arka planda çalışanlardan herhangi birine sahipseniz, Etkinlik canlı veya ölü olup olmadığını izlemek istersiniz. Android'in sonraki sürümlerine yaşam döngüsü kontrolleri yapıldığını düşünüyorum, ancak botanik bayrağı onAttach() ve onDetach() üzerinde de tutabilirsiniz.

3

Fragmanın lifecycle bölümü, diğer uygulamaların belleğini saklamak için sistem tarafından öldürülüp yeniden oluşturulabilmesi için etkinliğin yaşam döngüsüne benzer. Bu, parçanın durumunu kaydetmek ve geri yüklemek için bir mekanizma olduğu anlamına gelir. Kullanmalısın.

Parçanın durumunu kaydet (dinamik ve seri hale getirilemeyen verileri nedeniyle), başlatılmamış durum için bazı varsayılan davranışları uygulamaya çalışın.

3

Geç gerçek olduğunu biliyorum ama aynı sorun var ve burada burada

support FragmentPagerAdapter holds reference to old fragments

ve ben sorunun zaman olacağı tahmin

ViewPager and fragments — what's the right way to store fragment's state?

cevapları bulundu Oluşturduğunuz aktiviteyi yaratırsınız ve fragman mentorunda değil, bazı listede fragmanları saklarsınız. Etkinlik yeniden oluşturulduğunda, bir parça da oluşturur, ancak parça yöneticisi daha önce oluşturulmuş olan parçayı kullanır. Bu, parçanızı getActivity() için null döndürür, çünkü bu bölüm uygulamayı arka planda koymadan önce oluşturulmuş olanıdır.

+2

Not: [sadece bağlantıya verilen cevaplar] (http://meta.stackoverflow.com/tags/link-only-answers/info) önerilmez, SO cevapları aramanın son noktası olmalıdır. bir çözüm (zamanla bayat eğilimi olan referansların bir başka mola). Lütfen bağlantıyı referans olarak tutarak, burada tek başına bir özet eklemeyi düşünün. – kleopatra

+1

Bu bağlantılar gerçekten çok detaylı bir şekilde açıklıyor. Harika cevaplar. – Smeet