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:
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.
<!-- 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
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
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 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 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.
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 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