본문 바로가기
요모조모 정보

안드로이드 프래그먼트 네비게이션: 간편한 프래그먼트 전환과 데이터 전달 방법

by Kongkongpapa 2025. 3. 20.
728x90
반응형
SMALL

안드로이드 앱 개발에서 프래그먼트 네비게이션은 사용자 경험을 향상시키고 앱의 구조를 효율적으로 관리하는 데 필수적인 도구입니다. 이번 포스팅에서는 프래그먼트 네비게이션을 사용하여 프래그먼트 간 이동을 구현하고 데이터를 전달하는 방법을 자세히 알아보겠습니다.

프래그먼트 네비게이션이란?

프래그먼트 네비게이션은 앱의 UI를 여러 개의 프래그먼트로 나누고, 사용자 인터랙션에 따라 프래그먼트 간의 전환을 관리하는 기술입니다. 이를 통해 복잡한 UI를 효과적으로 구성하고, 유지보수성을 높일 수 있습니다.

프래그먼트 네비게이션 사용 방법

1. 의존성 추가

build.gradle (Module:app) 파일에 네비게이션 관련 의존성을 추가합니다.

Gradle
 
dependencies {
    implementation("androidx.navigation:navigation-fragment-ktx:2.7.5")
    implementation("androidx.navigation:navigation-ui-ktx:2.7.5")
}

2. 네비게이션 그래프 생성

res/navigation 폴더에 새로운 네비게이션 그래프 XML 파일을 생성합니다. 이 파일에서 프래그먼트 간의 이동 경로와 연결 관계를 정의합니다.

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/firstFragment">

    <fragment
        android:id="@+id/firstFragment"
        android:name="com.example.fragmentnavigation.FirstFragment"
        android:label="First Fragment"
        tools:layout="@layout/fragment_first">
        <action
            android:id="@+id/action_firstFragment_to_secondFragment"
            app:destination="@id/secondFragment" />
    </fragment>

    <fragment
        android:id="@+id/secondFragment"
        android:name="com.example.fragmentnavigation.SecondFragment"
        android:label="Second Fragment"
        tools:layout="@layout/fragment_second">
        <argument
            android:name="data"
            app:argType="string" />
    </fragment>
</navigation>

3. NavHostFragment 추가

액티비티 또는 부모 프래그먼트의 레이아웃 파일에 NavHostFragment를 추가합니다.

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

4. 프래그먼트 이동

프래그먼트 코드에서 findNavController() 메서드를 사용하여 네비게이션 컨트롤러를 가져오고, navigate() 메서드를 사용하여 정의된 액션을 실행합니다.

Kotlin
 
// FirstFragment.kt
view.findViewById<Button>(R.id.button_to_second).setOnClickListener {
    findNavController().navigate(R.id.action_firstFragment_to_secondFragment)
}

프래그먼트 간 데이터 전달 방법

1. Argument 사용

네비게이션 그래프에서 <argument> 태그를 사용하여 전달할 데이터를 정의하고, navigate() 메서드에 데이터를 담은 Bundle을 전달합니다.

Kotlin
 
// FirstFragment.kt
val bundle = bundleOf("data" to "Hello, Second Fragment!")
findNavController().navigate(R.id.action_firstFragment_to_secondFragment, bundle)

// SecondFragment.kt
val data = arguments?.getString("data")

2. Safe Args 사용 (권장)

Safe Args는 타입 안정성을 제공하고 코드 가독성을 높여주는 네비게이션 플러그인입니다. build.gradle (Project:YourApplicationName) 파일에 플러그인을 추가하고, build.gradle (Module:app) 파일에 플러그인을 적용합니다.

Gradle
 
// build.gradle (Project:YourApplicationName)
buildscript {
    dependencies {
        classpath("androidx.navigation:navigation-safe-args-gradle-plugin:2.7.5")
    }
}

// build.gradle (Module:app)
plugins {
    id("androidx.navigation.safeargs.kotlin")
}

네비게이션 그래프에서 <argument> 태그를 사용하여 전달할 데이터를 정의하고, 생성된 Directions 클래스를 사용하여 데이터를 전달합니다.

Kotlin
 
// FirstFragment.kt
val action = FirstFragmentDirections.actionFirstFragmentToSecondFragment("Hello, Second Fragment!")
findNavController().navigate(action)

// SecondFragment.kt
val args = SecondFragmentArgs.fromBundle(requireArguments())
val data = args.data

추가 팁

  • 네비게이션 그래프에서 애니메이션과 전환 효과를 정의하여 부드러운 화면 전환을 구현할 수 있습니다.
  • 백 스택을 관리하여 사용자가 이전 프래그먼트로 돌아갈 수 있도록 합니다.
  • DeepLink를 사용하여 앱의 특정 화면으로 바로 이동할 수 있습니다.

프래그먼트 네비게이션은 안드로이드 앱 개발에서 유용한 도구이지만, 올바르게 사용하지 않으면 앱의 성능이나 안정성에 영향을 줄 수 있습니다. 따라서 프래그먼트 네비게이션의 작동 방식을 충분히 이해하고, 신중하게 사용하는 것이 중요합니다.

728x90
반응형
LIST