1 Mart 2025 Cumartesi

Kotlin Navigasyon Uygulaması Örneği

Kotlin ile basit bir navigasyon uygulaması örneği oluşturabiliriz. Bu örnekte, Android Jetpack Navigation Component kullanarak birkaç ekran arasında geçiş yapmayı göstereceğim. Bu örnek, bir NavController ve NavHostFragment kullanarak ekranlar arasında geçiş yapmayı içerir.

1. Proje Kurulumu

Öncelikle, build.gradle dosyasına Navigation Component bağımlılıklarını ekleyelim:

gradle
Copy
dependencies {
    implementation "androidx.navigation:navigation-fragment-ktx:2.7.7"
    implementation "androidx.navigation:navigation-ui-ktx:2.7.7"
}

2. Navigation Graph Oluşturma

res klasörü altında navigation adında bir klasör oluşturun ve içine nav_graph.xml adında bir navigation graph dosyası ekleyin. Bu dosyada, uygulamanızın ekranlarını ve geçişleri tanımlayacaksınız.

xml
Copy
<!-- res/navigation/nav_graph.xml -->
<?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"
    app:startDestination="@id/homeFragment">

    <fragment
        android:id="@+id/homeFragment"
        android:name="com.example.navigationexample.HomeFragment"
        android:label="Home"
        tools:layout="@layout/fragment_home">

        <action
            android:id="@+id/action_homeFragment_to_detailFragment"
            app:destination="@id/detailFragment" />
    </fragment>

    <fragment
        android:id="@+id/detailFragment"
        android:name="com.example.navigationexample.DetailFragment"
        android:label="Detail"
        tools:layout="@layout/fragment_detail" />

</navigation>

3. Fragment'ları Oluşturma

HomeFragment ve DetailFragment adında iki fragment oluşturalım.

HomeFragment.kt

kotlin
Copy
package com.example.navigationexample

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.navigation.fragment.findNavController
import com.example.navigationexample.databinding.FragmentHomeBinding

class HomeFragment : Fragment() {

    private var _binding: FragmentHomeBinding? = null
    private val binding get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        _binding = FragmentHomeBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        binding.buttonGoToDetail.setOnClickListener {
            findNavController().navigate(R.id.action_homeFragment_to_detailFragment)
        }
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}

DetailFragment.kt

kotlin
Copy
package com.example.navigationexample

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.example.navigationexample.databinding.FragmentDetailBinding

class DetailFragment : Fragment() {

    private var _binding: FragmentDetailBinding? = null
    private val binding get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        _binding = FragmentDetailBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}

4. Layout Dosyalarını Oluşturma

Her fragment için bir layout dosyası oluşturalım.

fragment_home.xml

xml
Copy
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Home Fragment"
        android:textSize="24sp" />

    <Button
        android:id="@+id/buttonGoToDetail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Go to Detail" />

</LinearLayout>

fragment_detail.xml

xml
Copy
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Detail Fragment"
        android:textSize="24sp" />

</LinearLayout>

5. MainActivity'yi Güncelleme

MainActivity içinde NavController ve NavHostFragment kullanarak navigasyonu başlatalım.

kotlin
Copy
package com.example.navigationexample

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.setupActionBarWithNavController

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
        val navController = navHostFragment.navController

        setupActionBarWithNavController(navController)
    }

    override fun onSupportNavigateUp(): Boolean {
        val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
        val navController = navHostFragment.navController
        return navController.navigateUp() || super.onSupportNavigateUp()
    }
}

activity_main.xml

xml
Copy
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/nav_host_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="androidx.navigation.fragment.NavHostFragment"
        app:navGraph="@navigation/nav_graph"
        app:defaultNavHost="true" />

</FrameLayout>

6. Uygulamayı Çalıştırma

Uygulamayı çalıştırdığınızda, HomeFragment ekranı açılacak ve "Go to Detail" butonuna tıkladığınızda DetailFragment ekranına geçiş yapacaksınız. Action Bar'da geri butonu da otomatik olarak çalışacaktır.

Bu örnek, Kotlin ve Android Jetpack Navigation Component kullanarak basit bir navigasyon uygulaması oluşturmanın temel adımlarını göstermektedir. Daha karmaşık navigasyon yapıları oluşturmak için Navigation Component'in diğer özelliklerini keşfedebilirsiniz.

Hiç yorum yok:

Yorum Gönder