Android Jetpack Navigation Component

Gülçin Taş
Developer MultiGroup
3 min readMar 18, 2022

Android Uygulamalarımızın Bel Kemiği Jetpack Navigation Component

Top-Level Navigation Graph

Herkese Merhaba! 🤩

Bu yazı da yukarıdaki alt başlıkta da belirttiğim gibi android uygulamalarının olmazsa olmazı belki de en sevilen kütüphanelerden birisi olan Jetpack Navigation Component ile ilgili bir yazı yazmak istedim. Gelin hep beraber daha yakından inceleyelim.

Android dünyasında fragmentler ile çalışmak bazen hepimiz için bir kâbusa dönüşebiliyor. Bir de ortalama veya büyük denilebilecek bir projede yönlendirme işlemlerini fragment manager ile yapmak kâbusun tam kendisi olabilir. Jetpack Navigation Component, fragment manager ve backstack ile ilgili işlemleri arka planda bizim yerimize handle ediyor. Hem de çok güzel bir arayüz imkanı ile birlikte. 🥳

Jetpack Navigation Component`in Avantajları

💚 : Navigation editör ile basit ve anlaşılır bir kullanıcı arayüzüne sahip olması,

💙: Fragment transactionlar ile ilgili adımları bizim yerimize arka planda kendisinin ele alması,

💚: Deeplink kullanımı kolaylaştırması,

💙 : Safe Args (Gradle ile birlikte) navigasyon ve veri taşıma işlemlerinde type-safety sağlaması,

💚 : Fragment geçişleri arasında standart bir animasyon yapısı kullanmamıza olanak sağlaması,

💙 : Navigation Component sayesinde classlar içerisinde yer alan boilerplate diye adlandığımız kod kalabalığını da azaltmış olması,

💚: Global action, nested graph ve dialog fragment gibi ilgili ihtiyaca yönelik özellikleri de bulunuyor.

💙 : Navigation drawer, action bar menü gibi kompleks menülerin yönlendirme işlemlerinde de navigation component kullanabiliyoruz.

Safe Args

Safe Args plugini fragmentler arasında veri taşırken type safety olarak veri taşınmasını sağlar. Bundan dolayı da Google tarafında da navigation component ile birlikte kullanılması önerilir.

The recommended way to navigate between destinations is to use the Safe Args Gradle plugin. This plugin generates simple object and builder classes that enable type-safe navigation and argument passing between destinations.

Safe Args pluginini kullanmak için build. gradle dosyasina aşağıdaki tek satırı eklemeniz ve projenizde Gradle kullanmanız yeterlidir.

plugins {
id 'androidx.navigation.safeargs'
}

Safe Args ile navigation graph icerisinde argument ile transfer etmek istedigimiz verileri tanimlayabiliriz. Fragmentler arasinda veri tasimak icin bundle yapisi kullanilir. Safe Args`ta arka planda bundle yapısını kullanıyor ancak buna ek olarak diyelim ki HomeFragment`e veri gonderecegiz arka planda HomeFragmentArgs adında bir class oluşturuyor.

Navigation Component ile tanımladığımız actionlara class tarafında ID ile erişmek yerine yine Safe Args`in oluşturduğu HomeFragmentDirections class sayesinde daha güvenli bir yönlendirme yapabiliriz. Daha ne yapsın değil mi ? :)

Safe Args primitive tipleri desteklemekle beraber parcelable ve serializable yöntemleriyle kompleks veri yapılarını da kullanabiliriz.

Navigation Component

Navigation Component`i kullanabilmek için build. gradle dependency içerisinde aşağıdaki implementation adımlarını uygulamalıyız.

Set up your environment

Navigation Component ile yönlendirme yapabilmemiz için zorunlu üç temel yapı taşı aşağıda yer alıyor.

🔧 Navigation graph: res/navigation dosyasının altında yer alan xml dosyasıdır. Bu dosya içerisinde navigasyon ile ilgili fragmentler, actionlar, argumentler, deeplink kullanımı, animasyonlar gibi nice özellik design tabından veya xml kodları içerisinden eklenebilir.

🔧 NavHostFragment: Bu yapının işlevi navigation graph içerisindeki destinationlar arasındaki yönlendirmelere ev sahipliği yapmaktır. Bizim navigasyon işlemlerimizi gösteren boş bir konteyner olarak hayal edebiliriz.

🔧 NavController: NavHostFragment ile birlikte çalışarak uygulamadaki navigasyon işlemlerini yönlendirir. NavGraph içerisinde StartDestinastion olarak belirtilmiş olan fragment içerisinde tanımlanır.

NavController

En sevdiğim Jetpack kütüphanelerinden biri olan Navigation Componentin genel hatlarıyla bahsetmek istedim. İlerleyen zamanlar yine başka bir Jetpack kütüphanesinin yazısında görüşmek üzere o zamana kadar kendinize çok iyi bakin Android ile kalın. 💚💙

Kaynakça

  1. https://developer.android.com/guide/navigation
  2. https://developer.android.com/codelabs/android-navigation

--

--