Mastering in Fragments

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!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.