Android-Kotlin Fragment Kullanımı

Buse DEMİR
5 min readMar 26, 2022

--

Merhabalar.

Activity nin anası kuzusu olan Fragmentler ile sizi tanıştırmaya geldim. Gerçekten de sizce fotoğraftaki gibi Activity ler Fragment leri gözetiyor mu :)

Activity sakin olur musun Fragment yerini almaya gelmedii ..

Activity Nedir ?

Activity Android in en temel ve önemli yapılarından birisidir. Taşı toprağıdır. Aslında en kısa anlatılmasıyla uygulamadaki ekranlardır diyebiliriz. Uygulamamız ile kullanıcı arasındaki bağlantıları/etkileşimleri sağlar. Tabiki bunlar en temelleri, bu kadar önemli bir yapı bu kadar iş ile kalmıyor. Activity nin büyük bir yaşam döngüsü vardır. Her şeyini buradan ilerletir. Yaşam döngüsü ile ilgili en detaylı bilgiye yazımdan ulaşabilirsiniz :)

Android sisteminde Activity’ler, Activity yığınları olarak yönetilirler. Android Activity Sınıfı ile açılma sırasına göre ‘back stack’ dediğimiz bir yığına dizilir. Mesela bir mail uygulamamız olsun, kullanıcı ekrandan bir maile bastığında seçilen maili gösteren yeni bir Activity açılır, bu yeni Activity back stack’e eklenir. Kullanıcı ‘Geri’ tuşuna bastığında Activity sonlanır ve back stack’ten çıkarılır. Oluşturduğumuz her activity sınıfını manifest dosyasında tanımlamak zorundayız. Tanımlanmadıysa uygulama büyük ihtimalle çalışırken hata verip çökecektir.

Örneğin ; Bir online sipariş uygulamasının yeni siparişleri göstren bir listeye sahip olan bir aktivitesi olabilir , başka bir aktiviteyi yeni bir sipariş oluşturmak için , ve de üçüncü aktivite ile de kullanıcının sipariş vereceği ekranı sağlayabikir. Yani her bir aktivite bir kullanıcı arayüzüne sahip bir ekranı temsil etmektedir. Bu activitylerin görev ve amaçları farklı olabilir. Eğer örneğimizdeki gibi birden fazla aktivitye sahip ise bunlardan biri uygulama ilk başlatıldığında açılmak üzere olmalıdır. Yani Main Activity olmalıdır.

Activity Çeşitleri

Yeni bir proje oluştururken tabiki de ilk seçimimiz Activity türünü belirlemek olacaktır. Genel olarak Empty Activity kullanılır. Ama proje tercihimize göre bu şablonlarımızı belirlememiz gerekmektedir. 15 çeşit activity proje şablonumuz vardır. Hepsinin işlevi kullanım alanlarına göre değişmektedir.

  1. No Activity
  2. Basic Activity
  3. Bottom Navigation Activity
  4. Empty Activity
  5. Fullscreen Activity
  6. Google Admob Ads Activity
  7. Google Maps Activity (Detaylı bilgi için yazımı inceleyebilirsiniz 😊 https://medium.com/@buse93dmr/android-google-maps-teknolojileri-f6fb355d764)
developer.android.com
developer.android.com

Fragment Nedir ?

Bir kullanıcı ara yüzüdür. Uygulamalarımızda her zaman birden fazla ekran kullanmaya ihtiyaç vardır. Fragmentler sayesinde birden fazla ekran kullanabiliriz. Tek bir ekranı iki farklı işlev için kullanılır. Fragmentler Activity olmadan çalışamazlar.

Hemen ağlama Fragment , dur daha anlatacaklarımız bitmedi.. Malesefki Fragment kardeşimizin nefes alabilmesi için ve yaşamını sürdürebilmesi için activity e ihtiyaçları vardır. Fragmentleri kullanırken yönetici bir activity vardır. Fragmentler acitvity içerisinde fragment manager ile yönetilirler. Fragmentlerin de kendilerine ait bir yaşam döngüsü vardır. Kendi olaylarını kendisi halleder. Yani activity çalışmaya devam ederken düzenleme yapılabilir. Aynı ekranda bağımsız olarak kullanılabilir.

Önemli ❗️

Activityler Fragmentlerin yaşan döngülerinden etkilenmezler. Ancak Fragmentler Activity lerin yaşam döngülerinden etkilenirler.

Fragment Life Cycle

Activity nesnesi normal bir şekilde devam ederken Fragment nesneleri normal yaşam döngüsünü sürdürebilir. Activity nesnesinin yaşam döngüsünde gerçekleşen tüm değişiklikler barındırdığı Fragment nesnelerini de etkileyecektir.

Kısa Bilgi 😊

Fragment’ların en büyük avantajı çok daha hızlı ve performanslı olmalarıdır ve aynı ekranda iki farklı Activity çalıştırılamazken dilediğiniz kadar Fragment çalışabilir. Fakat bir Fragment tek başına çalıştırılamaz, çalışabilmesi için bir Activity’e ihtiyaç duyar.

Fragment Kullanımı

En basit bir uygulama ile kullanımı öğrenelim ..

2 adet fragmentimizi oluşturuyoruz. Gerekli XML işlemlerimizi yapıyoruz. Ardından Main activity e bu fragmentleri bağlayıp aynı ekranda sayfaların renklerinin değişimini sağlayacağız.

Fragment Oluşturmak ;

  1. Fragment i başlatabilmek için , fragment manager almamız gerekiyor. Bir fragment transaction oluşturmalıyız. Fragment Manager i , supportFragmentManager() ile alıyoruz ve beginTransaction() ile işlem yapmaya başlıyoruz.
  2. Fragment i oluşturuyoruz. Fragment oluştururken intent gibi yöntemler yapmıyoruz. Bildiğimiz en basit nesne oluşturma işlemleri yapıyoruz.
  3. Replace() ile containerview ın içindeki yapıyı değiştir komutunu veriyoruz. Yani Containerview daki alanı fragment daki alan ile eşitle demektir. Fragmentlerin containerId sini değiştirilemez.

Ufak Not 🤔

Fragmentler activity de yer alan kullanıcı etkileşimine yardımcı olmak için bir containera ihtiyaç duyar.

4.Commit() değişikliği yap diyoruz.

Önemli ❗️

Replace() kısmında bazı yerlerde “add” kullanımı görebilirsiniz. Ancak add kullanımı yazının üzerine ekler , replace ise önceki veriyi/yazıyı siler ve yeni veriyi öyle ekler. İkisinin arasındaki fark gözden kaçan yerlerde karışıklığa sebep olabiliyor.

Fragment içerisine bir veri göndermek istersek ;

Fragment yapımızın içerisine girip , oluşturdupum textView e erişmemiz gerekiyor. Eriştiğimiz textView i dışardan oluşturduğumuz bir değere eşitliyoruz.

Ardından eşitlenen değeri Main activitiy de de değer atama işlevini yapıyoruz. Aslında oldukça basit :)

SON 😉

Fragment lar bana göre kullanışlı yapılardır. Lakin sürekli her activity de kullanılmalı mı yoksa fragment da yapılacak işlevler bir activity ile mi yapılmalı soruları halen yaptığım mini uygulamalar da kafamı karıştırabilen bir nokta olmaktadır. Kimileri fragment leri elverişli bulurken kimileri uzak durayım diyebiliyorlar. Bu biraz yazılımcılara kalmış olabiliyor ve yaptığımız uygulama ve tasarım ile bunu belirlemek de gerekiyor. Fragment lerin Navigation yapısı ile tatlı bir kullanımları da mevcuttur :) Bir başka yazımda bunu paylaşıyor olacağım..

Fragmentları sevelim.. Onlar yanlız değildir .. 😊😊

--

--

Buse DEMİR

Hello, my name is Buse. I am a computer engineer. ❤️Love Android and Kotlin❤️. Just live..