05. Projenize NavHostFragment Eklemek

Navigation bileşeninin 3 ana bölümünden ikincisi olan olan NavHostFragment'ın projemize nasıl ekleyeceğimizi öğrenelim.

Bir önceki dersimizde nav_graph.xml isimli Navigation Graph dosyamızı oluşturduk ama bu dosyanın dizayn sekmesine geçtiğinizde sol kısımdaki HOST bölümünde "No NavHostFragment found" uyarısı ile karşılaşmıştık.

Uyarının sebebi ise kullanıcıların uygulamanızda gezinirken hedeflerin içeri-dışarı kaydırıldığı boş bir kapsayıcı olması ve varsayılan olarak bir NavHostFragment içermesi gerektiğinden kaynaklanıyor.

NavHostFragment'i eklemek için ise yine hem dizayn hem de metin bölümünü kullanabilirsiniz.

Dizayn bölümünü kullanacaksanız aşağıda olduğu gibi MainActivity'ye ait activity_main.xml dosyasınında dizayn bölümüne geçerek Containers altındaki NavHostFragment nesnesini ekrana sürükleyerek gerçekleştirebilirsiniz.

Daha yolun başında olduğumuzdan ve yaptıklarımızı daha iyi anlamak için ben XML üzerinden işlemimi gerçekleştireceğim.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <fragment
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navGraph="@navigation/nav_graph" />

</androidx.constraintlayout.widget.ConstraintLayout>

Kod bloğundaki fragment kısmı NavHostFragment'imi oluşturmuş oluyor. Şimdi burada dikkat etmemiz gereken hususların neler olduğunu irdeleyelim.

Dikkat Edilecek Hususlar

android:name attribute’u NavHost implementasyonunun (uygulamasının) sınıf adını (class name) oluşturur. Standart bir yazım şeklidir ve her NavHostFragment'te mutlaka olmalıdır.

android:name="androidx.navigation.fragment.NavHostFragment"

app:navGraph attribute’u NavHostFragment’ı bir navigation graph ile ilişkilendirir. Navigation graph, NavHostFragment içerisinde kullanıcıların gideceği tüm hedefleri belirtir.

app:navGraph="@navigation/nav_graph"

app:defaultNavHost="true" attribute’u NavHostFragment’ınızın sistem Geri düğmesini engellemesini sağlar. Eğer aynı layout’ta birden fazla host’unuz varsa (Örneğin; two-pane layouts), yalnızca bir NavHost belirttiğinize emin olun.

app:defaultNavHost="true"

Dersimizin başında nav_graph.xml isimli Navigation Graph dosyamızda dizayn sekmesine geçtiğinizde sol kısımdaki HOST bölümünde "No NavHostFragment found" uyarısı ile karşılaşıyorduk. NavHostFragment'imizi de eklediğimize göre artık yeni görüntümüz aşağıdaki gibi oluştu ve HOST kısmında bunu gözlemleyebiliyoruz.

Last updated