Android Navigation Component Nedir?

Armagan Civelek
4 min readDec 27, 2020

--

Andorid Jetpack’in kullanıcılara mükemmel uygulamalar yazması için bir dizi bileşen, kitaplık ve rehberlik sunan bir yapı olduğundan bahsetmiştik. Bu yazıda Jetpack’in bize sunduğu navigation bileşeni hakkında konuşacağız.

“Navigation Component” yukarıda gördüğünüz gibi uygulama içersinde ki gezinme aşamalarını görselleştirmemize yarayan bir bileşendir. Çok ekranlı uygulamalarda akış çok önemli bir yere sahiptir. Navigation sayesinde tüm bu akışı merkezi bir yerden görüp, yönetebiliriz.

Avantajları:

  1. Fragment geçiş işlemlerinin çok daha kolay yönetilmesini sağlar.
  2. Geri butonu sorununu varsayılan olarak çözer.
  3. Uygulamada kullanılacak animasyonları yönetilmesini sağlar.
  4. Destination’lar arasındaki veri aktarımını çok daha güvenilir ve tutarlı bir hale getirir.
  5. Navigation editör, daha az kod ile işlemleri yönetebilmemizi ve görselleştirmemizi sağlar.

Konuyla ilgili 3 anahtar kelimemiz var ;

  • Navigation graph: Navigation, bir kullanıcının bir uygulama üzerinden geçebileceği tüm olası yolları tanımlayan yeni bir kaynak türüdür. Belirli bir hedeften ulaşılabilen tüm hedefleri görsel olarak gösterir.
  • NavHost: layout dosyamıza eklediğimiz özel bir widget türüdür. Navigation graph dosyamızdaki işlemlerin çalışması için layout dosyamıza bir navHost eklemeliyiz.NavHost destination (fragment/activity) tutan boş bir konteynırdır.
  • navController: Adından da anlaşılacağı üzere navHosti yönlendirmeleri kontrol edeceğimiz bir denetleyicidir.

Nasıl Kullanılır ?

Bağımlılıkları ekleyerek başlamalıyız..

navigation graph eklemek:

  1. Res klasörüne sağ tıkla ve New->Android Resource File kısmını seç.
  2. my_navigation gibi bir dosya adı seç.
  3. Açılır pencereden resource type olarak Navigation u seç.

Destination yapılarını yöneteceğimiz navigation dosyasını oluşturduk. İçerisine daha iyi anlayabilmek için iki fragment (destination) ekleme işlemi yaptık.Fragmentlarımız içerisine ise bir adet “textview” ve “button” bileşeni koyduk.

Destination ekleme işlemini editörü kullanarak yapabiliriz.

Şekilde, design kısmında görülen dikdörtgen şeklindeki her sayfa destination tanımına karşılık gelirken, arasında ki oklar ise action kavramını gösterir.

Destination dediğimiz kavram, bir fragment olabilirken bir activity kavramına da karşılık gelebilir.Buradan sayfalar arası veri alışverişi, geçişlerdeki animasyonlar ve destination’lar arası akış şemasını yönetiriz.

NavHost eklemek:

activity_main.xml dosyası içerisine palette kısmında bulunan navHostFragment’ı seçip sürükleyebiliriz.Bize içerisine alacağı navgraph dosyasını soracaktır.Bu sayfa destination yapılarımızı tutan, kapsayan bir konteynır olacaktır.

NavController:

Sonunda,kullanıcı butona tıklamak gibi bir eylem yaptığında,navigate komutunu tetiklememiz gerek.NavHostFragment içerisindeki destination görüntüsünü değiştirecek NavController adını verdiğimiz özel bir sınıf vardır.

Bu sınıfa aşağıdaki yollar ile erişebiliriz:

sınıfımıza eriştikten sonra navigate( ) methodu ile destination adresimizi değiştirebiliriz.

Safe args :

Android, destination yapıları arasında gezinmek için “safe args” yolunu önerir.

Plugins:

Bu yolu kullanırken IDE bizim için yeni sınıflar oluşturur.Yanda gördüğünüz FirstFragmentDirections ve SecondFragmentDirections IDE tarafından oluşturuldu.

Bu, fragment isimlerinin yanına “directions” ibaresi eklenerek oluşturulur.

Daha önceden de belirttiğimiz gibi, navigation_graph dosyamızın içerisinde tüm olayı yönetebiliriz:

Fragment yapıları arasında ki oklarla nereye gideceğimizi belilerleyebiliriz.Fragmentler arası animasyon geçişini seçebilir yine fragmentlar arasında ki veri transferini de yönetebiliriz.

2. fragment den 1.fragmente veri yollarken attributes kısmında arguments sekmesine tıklayıp age adında Integer tipinde bir argument ekledik.

Eklediğimiz attribute dan sonra IDE bizim için yeni bir sınıf (FirstFragmenArgs) daha oluşturur ki biz bu sınıfı, veriyi gönderdiğimiz destination adresinde veriyi yakalamak için kullanacağız.

FirstFragmentArgs =destination adı + Args şeklinde oluştu.

2.fragment sayfasından gönderdiğimiz 35 değerinin 1.fragment tarafından yakalanıp ekrana basıldığını görebilirsiniz.

Temel olarak Jetpack ile hayatımıza giren navigation compenent kavramını anlatmaya çalıştım umarım faydalı olmuştur :)

bir sonrakinde görüşmek üzere sağlıcakla :)

--

--