안드로이드 앱 개발에서 프래그먼트 네비게이션은 사용자 경험을 향상시키고 앱의 구조를 효율적으로 관리하는 데 필수적인 도구입니다. 이번 포스팅에서는 프래그먼트 네비게이션을 사용하여 프래그먼트 간 이동을 구현하고 데이터를 전달하는 방법을 자세히 알아보겠습니다.
프래그먼트 네비게이션이란?
프래그먼트 네비게이션은 앱의 UI를 여러 개의 프래그먼트로 나누고, 사용자 인터랙션에 따라 프래그먼트 간의 전환을 관리하는 기술입니다. 이를 통해 복잡한 UI를 효과적으로 구성하고, 유지보수성을 높일 수 있습니다.
프래그먼트 네비게이션 사용 방법
1. 의존성 추가
build.gradle (Module:app) 파일에 네비게이션 관련 의존성을 추가합니다.
dependencies {
implementation("androidx.navigation:navigation-fragment-ktx:2.7.5")
implementation("androidx.navigation:navigation-ui-ktx:2.7.5")
}
2. 네비게이션 그래프 생성
res/navigation 폴더에 새로운 네비게이션 그래프 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를 추가합니다.
<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() 메서드를 사용하여 정의된 액션을 실행합니다.
// FirstFragment.kt
view.findViewById<Button>(R.id.button_to_second).setOnClickListener {
findNavController().navigate(R.id.action_firstFragment_to_secondFragment)
}
프래그먼트 간 데이터 전달 방법
1. Argument 사용
네비게이션 그래프에서 <argument> 태그를 사용하여 전달할 데이터를 정의하고, navigate() 메서드에 데이터를 담은 Bundle을 전달합니다.
// 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) 파일에 플러그인을 적용합니다.
// 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 클래스를 사용하여 데이터를 전달합니다.
// FirstFragment.kt
val action = FirstFragmentDirections.actionFirstFragmentToSecondFragment("Hello, Second Fragment!")
findNavController().navigate(action)
// SecondFragment.kt
val args = SecondFragmentArgs.fromBundle(requireArguments())
val data = args.data
추가 팁
- 네비게이션 그래프에서 애니메이션과 전환 효과를 정의하여 부드러운 화면 전환을 구현할 수 있습니다.
- 백 스택을 관리하여 사용자가 이전 프래그먼트로 돌아갈 수 있도록 합니다.
- DeepLink를 사용하여 앱의 특정 화면으로 바로 이동할 수 있습니다.
프래그먼트 네비게이션은 안드로이드 앱 개발에서 유용한 도구이지만, 올바르게 사용하지 않으면 앱의 성능이나 안정성에 영향을 줄 수 있습니다. 따라서 프래그먼트 네비게이션의 작동 방식을 충분히 이해하고, 신중하게 사용하는 것이 중요합니다.
'요모조모 정보' 카테고리의 다른 글
Jsoup Select 구문, try.jsoup.org에서 로또 번호로 테스트해보기 (1) | 2025.03.20 |
---|---|
Chrome 에서 Talend API Tester (무료) 확장 프로그램으로 API 테스트하기: 단계별 가이드 (0) | 2025.03.20 |
안드로이드 Retrofit으로 로또 당첨 번호 JSON 데이터 가져오기: 1000회차 예시 (0) | 2025.03.20 |
안드로이드 Retrofit으로 로또 당첨 정보 가져오기: 크롤링 예시 코드 (0) | 2025.03.20 |
안드로이드 Room DB 사용 가이드: 코드 예시와 함께 완벽 정복! (0) | 2025.03.20 |