> For the complete documentation index, see [llms.txt](https://egemen-mede.gitbook.io/jetpack-navigation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://egemen-mede.gitbook.io/jetpack-navigation/navigation-calisma-yapisi.md).

# 02. Navigation Çalışma Yapısı ve Bileşenleri

Bu bölümde Navigation komponent'ini oluşturan yapıtaşları neler? Hangi avantajları sağlıyor? gibi soruların cevaplarını bulacağız.

**Navigation** bileşeninin **3 ana** bölümü vardır.

**1.** **Navigation Graph** (Navigasyon Grafiği)\
**2.** **NavHostFragment** (NavHost, kullanıcı uygulamanızda gezinirken hedeflerin içeri dışarı kaydırıldığı boş bir kapsayıcıdır ve varsayılan olarak bir NavHostFragment’i içerir.)\
**3.** **NavController** (NavHost’taki hedef içeriğin değiştirilmesini düzenler.)

**Navigation Graph (Navigasyon Grafiği)**, yeni bir kaynak (resources) türüdür. Bilgi içeren ve merkezileştiren bir XML dosyasıdır. Daha da önemlisi artık bu bilgiler aşağıdaki gibi görselleştirilebilir durumda.

![Navigation Graph (Navigasyon Grafiği)](https://2300662549-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M-9we-f91sgtHSNx_N3%2F-M-A-BGwH-fbr_f8lPEA%2F-M-A6omRf94BLctrtu_d%2F005.png?alt=media\&token=cd9ed8a3-5e83-4bd6-a3a2-c876e34102f8)

\
**Navigation Editor** adı verilen bu editör üzerinde aşağıda göründüğü gibi hem içerik alanlarını hem de birbiri ile olan bağlantıları görüntülenir.

![Navigation Editor üzerinde Destinations ve Actions](https://2300662549-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M-9we-f91sgtHSNx_N3%2F-M-A8KSiGmxcDHTnMqPD%2F-M-A9ZFEJfK7xK8_xh7Y%2F006.png?alt=media\&token=e04d4cab-2c1b-4f11-8ffe-ed973a0f840e)

**1.** Uygulamanızdaki farklı içerik alanlarını belirtir. (**Destinations**)\
**2.** Kullanıcıların alabileceği yolları belirten mantıksal bağlantılardır. (**Actions**)

Bu iki ifadeyi (**Destinations** ve **Actions**) bundan sonra da sıklıkla duyacaksınız.

### Navigation Editor

Projenize bir graph ekledikten sonra, graph'ı Android Studio Navigation Editor ile açabilir, görsel olarak düzenleyebilir veya XML'i doğrudan düzenleyebilirsiniz.

![Navigation Editor](https://2300662549-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M-9we-f91sgtHSNx_N3%2F-M-AkpjBMtnRFoKFziCz%2F-M-DsYibePij7PmJUcFL%2F018.png?alt=media\&token=ae389d39-7947-4f1e-ad55-bf4078cad3f2)

1. **Destinations (Hedefler) paneli:** HOST ve Navigation Editor'de bulunan bulunan tüm hedefleri listeler.
2. **Graph Editörü:** Navigasyon grafiğinizin görsel bir temsilini içerir. Hem XML içerinde metin görünümünü hem de grafik görünümü görebilirsiniz.
3. **Attributes:** Ekranın sağ kısmında navigation graph'ta' seçili olan öğenin niteliklerini gösterir.

Editor'ün Metin sekmesinde de XML kısmına göz atabilirsiniz.

```markup
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/nav_graph">

</navigation>
```

\<navigation> elementi, bir navigation graph'ın kök (root) öğesidir. Graph'ınıza destination ve action ekledikçe, burada karşılık gelen \<destination> ve \<action> öğelerini alt öğeler olarak görebilirsiniz. Ayrıca [Nested graph](https://developer.android.com/guide/navigation/navigation-nested-graphs)'larınız varsa, bunlar da alt \<navigation> öğeleri olarak görünür.

### Navigation Component’in Avantajları Nelerdir?

\- Fragment işlemlerini işleme (handling)\
\- Varsayılan olarak yukarı ve geri işlemlerini doğru şekilde işleme.\
\- Derin bağlantıların (deep linking) uygulanması ve ele alınması. (handling)\
\- Minimum ek çalışma ile birlikte “bottom navigation”, “navigation drawers” gibi Navigation UI pattern’leri ile kolay entegrasyon ve çalışma.\
\- Hedefler arasında gezinirken ve veriler arasında geçiş yaparken tür güvenliği sağlayan (Safe Args) bir gradle eklentisi içerir.\
\- ViewModel desteğine sahiptir. UI ile Navigation Graph hedefleri arasında paylaşmak için bir ViewModel ‘i bir Navigation graph’a dahil edebilirsiniz.

> Navigation, Android Studio 3.3 ve üzeri ile kullanılabilir durumdadır.
