Ne kadar รงok fragment kullandฤฑฤฤฑnฤฑz ya da kaรง yฤฑldฤฑr Android developer olarak รงalฤฑลtฤฑฤฤฑnฤฑzdan baฤฤฑmsฤฑz olarak, her Fragment kullandฤฑฤฤฑnฤฑzda Fragmentle ilgili ลaลฤฑrtฤฑcฤฑ ลeyler รถฤrenebilirsiniz. En azฤฑndan benim iรงin รถyle ๐ Bazฤฑlarฤฑnฤฑz yazฤฑyฤฑ tamamladฤฑฤฤฑnฤฑz yaa bunlarฤฑ bilmiyor muydun diyeceksiniz, bazฤฑlarฤฑ ben de รงektim evet diyecek ama benim amacฤฑm bir gรผn bunu yaลarsanฤฑz yol gรถsterici olmasฤฑ.
Bugรผnรผn konusu ise setUserVisibilityHint methodu. Aslฤฑnda bakฤฑldฤฑฤฤฑnda รงok faydalฤฑ gรถrรผnรผyor. Fragment’in bize ne zaman visible olduฤu/olmadฤฑฤฤฑ bilgisini veriyor. Buna gรถre sayfanฤฑn รงizilmesinde aksiyon alabiliriz, bir task baลlatฤฑp รถrneฤin data รงekeceksek burada yapabiliriz. Bรถylece optimizasyon saฤlayabiliriz. Ama tutorial’da da belirtmiล ki lifecycle’a baฤlฤฑ olarak Fragment yaratฤฑldฤฑktan sonra รงaฤrฤฑlmayabilir. Fragment gรถrรผndรผฤรผ an รงaฤrฤฑlacak ancak, รถnce setUserVisibilityHint methodu sonra onCreate รงaฤrฤฑlabilir.
Fragment’i tek baลฤฑna kullanฤฑyorsanฤฑz ya da รงok fazla sayฤฑda fragment iรงeren bir viewpager’ฤฑnฤฑz varsa bu case’e dรผลebilirsiniz. รรผnkรผ gerรงekten de yaratฤฑlma anฤฑ ve gรถsterim anฤฑ รงakฤฑลabilir. Bu durumda รถrneฤin data รงekeceฤinizi dรผลรผnelim, hem visibility’yi hem de isResumed() i รงaฤฤฑrarak double check yapabilirsiniz. Kod yazmadan sadece anlatarak รงok da aรงฤฑklayฤฑcฤฑ olmuyor. Aลaฤฤฑdaki kod bloฤu anlatmak istediฤimi gรถsteriyor ๐
Peki bu case’e dรผลmeyi beklediฤimiz senaryo nedir dersek pageradapter hepimizin bildiฤi gibi optimizasyon iรงin kendisi dฤฑลฤฑnda bir fragmenti daha yaratฤฑyor. Yani eฤer 2 fragment’im var ve viewpager kullanmama raฤmen yine de bu method ilk aรงฤฑlฤฑลda true dรถnรผyorsa bir tuhaflฤฑk var demektir. รรผnkรผ object olarak en azฤฑndan Fragmentimiz elimizde. Peki sonuรง, girebiliyor.
Burada bilmediฤimiz ama hayati olan bilgi setUserVisibilityHint methodunun default’da true dรถnmesi. Bunun sebebini hala anlayabilmiล olmasam! da eฤer sadece vibility’yi kullanฤฑrsanฤฑz burada sorun yaลanacaฤฤฑ kesin. Source kodu inceleyince farkettim ๐ Bu case’e ne zaman dรผลebilirsiniz? Sayfanฤฑzฤฑn aรงฤฑldฤฑฤฤฑ an ve sonrasฤฑnda(remoteconfig’den deฤiลmesi gibi) , baลlangฤฑรงta var olmayan bir fragment yaratฤฑlacak. notifyDataSetChanged รงaฤrฤฑldฤฑ ama olacak senaryo beklenenden farklฤฑ olabilir. Fragment daha yaratฤฑlmadan setUserVisibilityHint trigger edildi ve de true’ydu. Oysaki fragment visible zannerek yazdฤฑฤฤฑmฤฑz kodumuz bu sefer crashe sebep olabilir.
setUserVisibilityHint’le baลฤฑ derde girenler olursa, yardฤฑmcฤฑ olmasฤฑ dileฤiyle!