Android Studio’daki Default Activitylerin Arkaplanında Aslında Neler Oluyor? [Basic Activity]
Herkese tekrardan merhaba, bugün bir önceki Medium yazımdan biraz daha farklı bir konuya değinmeye çalışacağım.
Sizinde bildiğiniz üzere ya da daha önceden bilmiyor iseniz bu yazı ile birlikte öğreneceğiniz üzere, Android Studio içerisinde “Default Project Templates” adını verdiğimiz Android Studio tarafından kullanıcılara sunulan varsayılan birtakım proje taslakları mevcut. Bu proje taslakları kullanıcının tasarlamak istediği uygulamaya yönelik olarak kayda değer kolaylıklar sağlamakta. Bu yazıda, bu proje taslakları içerisinden Basic Activity’i inceleyeceğiz. Yazımdaki temel amaç, proje Basic Activity ile oluşturulduktan sonra özellikle arkaplanda neler olduğuna odaklanmak. O zaman gelin, incelemeye başlayalım..
Basic Activity
Bir Basic Activity içerisinde proje oluşturduktan sonra gözümüze çarpan şeylerden ilki deafult olarak 3 sınıfa sahip olmamız. Bunları sırasıyla; “First Fragment”, “Main Activity”, ve “Second Fragment” olarak sıralayabiliriz. Şimdi sırasıyla bu classlar içerisindeki kodları analiz etmeye çalışalım.
FirstFragment.kt Class:
FirstFragment sınıfımızda 2 adet override edilmiş metod görmekteyiz. Bunlardan birincisi onCreateView(), bir diğeri ise onViewCreated(). onCreateView() metodu ile birlikte ‘layout’ XML dosyamıza karşılık gelen View nesnelerine atıfta bulunulmaya çalışıldığını görmekteyiz. İçerideki infalater.inflate() fonksiyonunda layout olarak ilk fragmentımızı initalize ettiğimizi belirttikten sonra ‘attachToRoot’ bileşenini false olarak eşitlediğimizi görmekteyiz. Burada bunu ‘false’ olarak bırakmamızın sebebi ne diye soracak olursanız; attachToRoot ‘false’ olduğunda, ilk parametreden gelen layout dosyası inflate edildiği ve bir ‘View’ olarak döndürüldüğü için diyebiliriz. Son olarak onViewCreated() metodumuzu görmekteyiz. Bu metod içerisinde önemli olan kısım findNavController().navigate fonksiyonumuz. Bu fonskiyonun amacı, NavGraph inflate edildiğinde, buradaki eylemleri ayrıştırmak ve grafikte tanımlanan konfigürasyonlarla ilgili NavAction nesneleri oluşturmak. Örnek verecek olursak, “action_b_to_a”, hedef b’den hedef a’ya gitmek olarak tanımlanır.
MainActivity.kt Class:
MainActivity sınıfımızın içerisinde karşımıza 3 override edilmiş metod çıkmakta. Bu metodlar onCreate(), onCreateOptionsMenu() ve, onOptionsItemSelected olarak belirlenmiş. onCreate() metodu içerisinde setContentView() metodu çağırılmakta ve bu metod ‘layout’unu default olarak oluşturulmuş bir başka dosya olan activity_main.xml dosyasından kullanmakta.
activity_main.xml dosyasının içerisine baktığımızda varsayılan olarak bir CoordinatorLayout ile başladığını, daha sonra AppBarLayout ile devam ettiğini, FloatingActionButton ile de kapanışı yaptığını görüyoruz. ‘layout’ bileşeni olarak content_main.xml dosyasından faydalanılmış.
content_main.xml dosyasının içerisine girdiğimizde bir ConstrainLayout ile başladığını ve ‘style’ olarak da fragment ile devam ettiğini görüyoruz. ‘fragmentChild’ için NavHostFragment bileşeninden faydalanılmış. NavGraph bileşeninin de kullanılmış olduğunu söylememiz önemli.
Peki Nedir bu NavHostFragment ve NavGraph bileşenleri? Hadi gelin, daha detaylı bir şekilde inceleyelim.
İncelememize nav_graph.xml dosyamızın içerisine girerek devam ediyoruz. Kodların içerisinde 2 adet child fragment olduğunu görmekteyiz. Bunlardan birisi, FirstFragment, diğeri de SecondFragment olarak belirlenmiş.
FirstFragment’ımızın ‘layout’una baktığımızda karşımıza ‘Hello first fragment’ yazan bir “TextView” ve bir de ‘Next’ yazan “Button” attribute gelmekte. Ve default layout type olarak ConstrainLayout’un belirlendiğini görmekteyiz.
SecondFragment’a bakacak olursak içeride bir adet TextView görmekteyiz. Bu TextView’da herhangi bir “text” yazılı olarak bulunmuyor. Ve bir adet ‘Previous’ yazan “Button” attribute görmekteyiz.
MainActivity.kt Classı içerisindeki varsayılan 3 fonksiyon:
onCreate(): Bu fonksiyonumuz içerisinde toolbarımızın findViewById() fonksiyonu ile initialize edildiğini görmekteyiz. Aynı zamanda floatingButton’umuza ait olan listener eventimizin de eklendiğini görüyoruz. Bu event sayesinde SnackBar’ın istenilen actiona sahip olması sağlanmakta.
onCreateOptionsMenu(): Bir etkinliğin seçenekler menüsünü belirtmek için, onCreateOptionsMenu () öğesine override etmek aracılığıyla kullanılmış bir fonksiyon olduğunu söyleyebiliriz. Bu yöntem ve fonksiyon ile birlikte, XML2de tanımlanan menü kaynağınızı, ‘callback’ adını verdiğimiz geri aramada sağlanan Menüye şişirebilme imkanı sağlanmakta.
onOptionsItemSelected(): Kullanıcı seçenekler menüsünden bir öğe seçtiğinde (uygulama çubuğundaki eylem öğeleri dahil), sistem etkinliğinizin onOptionsItemSelected() metodunu çağırır. Bu metod, seçilen MenuItem’i gönderir. Menü öğesinin benzersiz kimliğini (menü kaynağındaki android: id özniteliğiyle veya add() metoduna verilen bir tamsayı ile tanımlanmış olanlardan) döndüren getItemId() metodunu çağırarak öğeyi tanımlayabilmeniz mümkün. Uygun eylemi gerçekleştirmek için bu kimliği bilinen menü öğeleriyle eşleştirebilirsiniz.
SecondFragment.kt Class:
SecondFragment sınıfımızda FirstFragment sınıfımızda söylediğimiz şeylerin hepsi aynı şekilde geçerli. Tek farkı variableların (first_fragment ve second_fragment) swaplanmış olması.
Yazımda genel olarak AndroidStudio içerisindeki Basic Activity’nin arkaplanında neler olduğunu anlatmaya çalıştım. Umarım kullanmak isteyen herkes için güzel bir başlangıç yapabilmelerine vesile olur. Değerli vaktinizi ayırıp okuduğunuz için çok teşekkür ederim. Başka yazılarda görüşmek üzere..