Activity üzerinde fragment oluşturma yolları

Ömer Ateş
3 min readFeb 18, 2020

--

Activityler gibi fragmentların da yaşam döngüleri mevcuttur. Uygulama geliştirme aşamalarında tüm sayfaların activity olması performans açısından fragmentlara göre düşüktür. Lakin fragmentlar, activityler üzerinde oluşturulduğu veya işlendiği için en az bir activity ye sahip olmalıyız. Bu yüzden tek activity üzerinde diğer tüm gerekli olan sayfalama işlemlerimizi fragment dediğimiz view grupları ile oluşturmamız daha sağlıklı olacaktır. Fragment oluşturmak için 2 adet yol bulunmaktadır.

1- Xml içerisine component olarak fragment eklemek

fragmentUI
activity_main.xml

Bir activity oluşturduğumuzda ister Componentlerde fragment ekleyerek istersek de direkt xml e yazarak bu yöntem ile fragment oluşturabiliriz. 4 temel parametre alması gereklidir. Bunlarda ilki genişlik. İkincisi yükseklik. Üçüncüsü ise id veya herhangi bir tag eklemektir. Eğer bunları eklemediğimiz takdirde projeyi çalıştırırken direkt hata ile karşılaşmamız kaçınılmazdır. En önemli ve son temel olan parametre ise name parametresidir. Oluşturduğumuz componentin hangi fragmentı temsil edeceğini belirttiğimiz yerdir. İçerisine alacağı değer ise paket ismi devamında fragment ismidir. Bu kullanımın bir benzeri ise manifest dosyalarında activity tanımlaması yaparken kullanıyordu.O durumda ilk activity yi tanımlarken .MainActivity şeklinde belirtiyorduk. Burada nokta(.) dediğimiz yer paket ismi devamında ise activity ismini veriyorduk. Fragment da ise nokta yerine paket ismini direkt yazmamızdır.

2- Dinamik olarak kod ile fragment eklemek

İkinci yol olarak activity içerisinde bulunan kotlin classı içerisine kod ile fragment eklemektir.

Öncelikle varolan fragmentımızın bir nesnesini oluşturuyoruz.Ardından fragment nesnemizi kullanmak için add fonksiyonuna ulaşmamız gerekiyor. Bunun için supportFragmentManager sınıfını çağırıyoruz. Burada bilmemiz gereken fonksiyon add fonksiyonudur. Parametre olarak tag ve fragment nesnesi alabilir ya da id ve fragment nesnesi alabilmektedir.Biz burada id değeri verdik. Xml de oluşturduğumuz FragmentContainer id li frameLayoutu burada kullanıyoruz.

FrameLayout kullanmamızın nedeni ise diğer layoutların en temelinde olmasıdır.Böylece bellekte diğerleri kadar yer kaplamamaktadır.

İki yöntem arasındaki en temel fark nedir ?

Yaşam döngülerine baktığımız zaman çalışma zamanları şöyledir: Xml de eklediğimiz fragmentın oluşturma metodları çalışır ardından acitivity onCreate() metodu çalışır. En son ise dinamik olarak eklediğimiz fragmentın yaşam döngüleri yaratılır. Dinamik olarak eklediğimiz kod parçası onCreate() fonksiyonu içerisinde olacağı için fragment oluşumunda önce onCreate() oluşmak zorundadır.

Diğer bir hususta şöyledir : Eğer xml ile bir fragment oluşturmak istersek ilk açılışta hız açısından iyidir lakin bu fragmenttı sayfada daha sonradan göstermek için visible ayarları ile oynamak gerekir.Asıl durum burada gerçekleşmektedir.Biz fragmentı oluşturduğumuzda visible ayarını gone ya da visible yaparak görünürlüğünü pasifleştirebiliriz ama bu fragment içerisindeki tüm viewlar her türlü yaratıldığı için hafızada gereksiz yer kaplaması durumu olacaktır.

Web sitelerinde gördüğümüz somut bir örnek ile de açıklayabiliriz. Web Sitelerin ilk açılışta 10,20 sayfalık sliderlar vardır. Eğer bunlar ilk açılışta 20 slide da yüklenirse aşırı hafıza tüketir fakat her sayfa geçişinde o anki slide ın yüklenmesi daha sağlıklı olacaktır. Fragmentlarda ise dinamik olarak eklemek burada avantaj sağlamaktadır.

Umarımf ragmentları activity ler üzerine nasıl ekleyebileceğimiz hakkında bilgi sahibi olmanızı sağlamışımdır.Öğrendiklerinizi projelerde daha iyi kullanabilmek dileğiyle…Beğendiyseniz alkışlamayı unutmayın :)

--

--