티스토리 뷰

1. Androuid Navigation이란??

- Fragment와 Activity간 구현을 간단하고 안정적이게 이동할 수 있도록 도와주는 Component

- Navigation은 Single Activity & Multiple Fragments 구조 -> Activity를 주로 다룰때 장점이 적음

- Kotlin을 사용할것을 권장함 

 

* Navigation의 장점 

(1) Fragment Transaction 직접 다루지 않아도 됨

(2) Back/Up 동작을 기본 지원

(3) 화면 전환에 Type이 지정된 데이터 전달 가능

(4) 안드로이드 리소스로 Animation/Transition 설정가능

(5) 딥링크 지원 

(6) Navigation drawer, Bottom Navigation -> Navigatiion 연동가능 

 

 

* Navigation의 기본원칙

(1) 앱은 반드시 고정된 시작점을 가져야 한다 - 고정된 시작점은 사용자가 보는 첫번째 화면 

(2) Navigation 상태는 Destination의 Stack으로 표현되어야함

(3) Up 버튼으로 앱이 종료되면 안됨 

(4) App Task내에는 Up과 Back 버튼은 동일하게 동작해야함

(5) 딥링크와 탐색은 동일 Stack으로 처리되어야함 .

 

 

- Navigation을 실행하는 방법? res/navigation 폴더 생성 뒤 우측 마우스 클릭해서 navigation resource 파일 생성하기. 

  res 폴더에서 오른쪽 클릭 -> Android Resource File 생성 

  이후 build.gradle에서 dependencies 파일 자동 생성

  -> implementation 'androidx.navigation:navigation-fragment:2.3.0'
 -> implementation 'androidx.navigation:navigation-ui:2.3.0' 

- 처음 MainActivity와 MainFragment를 합칠때는 navHostFragment를 사용하여 합쳐주기 

- 그리고 원하는 Fragment1과 Fragment2를 만들어서 각각 생성한뒤 navigation에서 배치해주기(이때 Fragment는 마우스 오른쪽 클릭을 해서 Blank Fragment 생성 뒤 만들어준다) 

- 중요한건 화살표! 화살표(R.id.action_mainFragment_to_blankFragment) 가 Action이기 때문에 Fragment - onViewCreated 에서 설정을 해줌

- 관련 Android 공식 page 

 

 

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
   super.onViewCreated(view, savedInstanceState);

  view.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View view) {
           Navigation.findNavController(view).navigate(R.id.action_mainFragment_to_blankFragment);
        }
    });
}
cs

 

 

 

2. JAVA를 사용해서 Navigation 만들기 

- 공식문서

developer.android.com/guide/navigation/navigation-getting-started?hl=ko

 

탐색 구성요소 시작하기  |  Android 개발자  |  Android Developers

이 주제는 탐색 구성요소를 설정하고 사용하는 방법을 설명합니다. 탐색 구성요소의 대략적인 개요는 탐색 개요를 참조하세요. 환경 설정 참고: Android 스튜디오에서 탐색을 사용하려면 Android 스

developer.android.com

 

 

 

1번 -> 앱의 다양한 콘텐츠 영역 / 2번 - 사용자가 취할 수 있는 경로 나타내는 논리적 연결 

 

(1) 추가해야 할 요소

- Declaring dependencies  

 

dependencies {
 
def nav_version = "2.3.0"

 
// Java language implementation
  implementation
"androidx.navigation:navigation-fragment:$nav_version"
  implementation
"androidx.navigation:navigation-ui:$nav_version"

 
// Kotlin
  implementation
"androidx.navigation:navigation-fragment-ktx:$nav_version"
  implementation
"androidx.navigation:navigation-ui-ktx:$nav_version"

 
// Feature module Support
  implementation
"androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

 
// Testing Navigation
  androidTestImplementation
"androidx.navigation:navigation-testing:$nav_version"
}

- Safe Args

buildscript {
    repositories
{
        google
()
   
}
    dependencies
{
       
def nav_version = "2.3.0"
        classpath
"androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
   
}
}

 

(2) Navigation ResourceFile 설정

 

(3) Navigation이 되기 위한 Fragments 생성하기

 

(4) MainActivity에 MainFragment를 붙이기 위해서 NavHostFragment 추가 필요

https://developer.android.com/guide/navigation/navigation-getting-started?hl=ko

 

  • android:name 속성은 NavHost 구현의 클래스 이름을 포함
  • app:navGraph 속성은 NavHostFragment를 탐색 그래프와 연결,  탐색 그래프는 사용자가 이동할 수 있는 이 NavHostFragment의 모든 대상을 지정
  • app:defaultNavHost="true" 속성을 사용하면 NavHostFragment에서 시스템 뒤로 버튼을 차단. 하나의 NavHost만 기본값으로 지정. 동일한 레이아웃에 여러 개의 호스트가 있다면(예: 창 두 개 레이아웃) 하나만 기본 NavHost로 지정. 

(5) 기본 Fragment 생성 만들어보기(Template)

 

 

 

3. Kotlin을 사용해서 Navigation 만들기 

.. 추후에 ... 

 

 

 

 

<출처> 

1. SOUP Medium

2. 오준석의 생활코딩 - Youtube --> 강의보고 정리한 내용  

3. 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함