일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- El
- 빌터패턴
- Design Pattern
- PrototypePattern
- 옵저버 패턴
- Observer Pattern
- Functional Programming
- Singleton
- a
- 코틀린
- Abstract Factory
- 추상팩토리패턴
- 팩토리 메소드
- 디자인패턴 #
- F
- builderPattern
- ㅋㅁ
- 디자인패턴
- designPattern
- 함수형프로그래밍
- ㅓ
- factory method
- 프로토타입 패턴
- r
- 추상 팩토리
- Kotlin
- 싱글톤
- Today
- Total
오늘도 더 나은 코드를 작성하였습니까?
Navigation component 시작하기 본문
1. navi graph 만들기
navigation은 app의 destination(화면)간에 발생합니다.
즉, 사용자는 앱의 모든 위치에서 navigation 할 수 있다. destination(화면)은 작업을 통해 연결됩니다.
navi graph 는 모든 destination과 action 포함하는 리소스 xml파일입니다. 그래프는 앱의 모든 path를 나타냅니다.
1. Destinations 은 앱 내부 다양한 컨텐츠를 표현하는 Acticity/Fragment 이다.
2. Action 사용자가 취할 수 있는 경로를 나타내는 Destinations간의 논리적 연결입니다
2. NavHost를 Activity에 추가하기
navi component 의 핵심 부분 중 하나는 navi host 입니다.
navi host는 사용자가 앱을 탐색할 때 destination이 변경되는 빈 컨테이너입니다.
navi host는 NavHost에서 파생되어야 합니다.
NavHost 구현인 NavHostFragment는 fragment destination 변경을 처리합니다
android:name="androidx.navigation.fragment.NavHostFragment"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph"
android:name - NavHost 구현의 클래스 이름입니다.
app:navGraph - NavHostFragment를 navi graph와 연결한다.
app:defaultNavHost="true" - NavHostFragment는 system back button을 가로챕니다
* 하나의 NavHost만 default이 될 수 있습니다. 동일한 레이아웃에 여러 호스트가 있는 경우(예: 두 개의 창 레이아웃) 기본 NavHost를 하나만 지정해야 합니다.
3. navi graph에 destination 추가하기
기존 Fragment 또는 Activity에서 destination을 만들 수 있습니다.
navi editer 를 사용하여 새 대상을 만들거나 나중에 ragment 또는 Activity으로 대체할 자리 표시자를 만들 수도 있습니다.
4. destination 속성
Type - destination 소스 코드에서 fragment, activity 또는 user custom 클래스로 구현되는지 여부
Label - 사용자의 읽기 편의성을위한 destination 이름(toolbar 화면 이름으로 사용된다.)
* setupWithNavController()를 사용하여 NavGraph를 toolbar에 연결하는 경우, UI에 표시될수 있기에 이 값에 리소스 문자열을 사용하는 것이 좋습니다.
ID - 코드에서 대상을 참조하는 데 사용되는 destination ID입니다.
name(Class) - destination과 연결된 클래스의 이름이 표시됩니다.
이 드롭다운을 클릭하여 연결된 클래스를 다른 destination 유형으로 변경할 수 있습니다.
5. 시작 destination 지정하기.
시작 destination은 사용자가 앱을 열 때 보는 첫 번째 화면이고 사용자가 앱을 종료할 때 보는 마지막 화면입니다.
navi 편집기는 집 아이콘을 사용하여 시작 목적지를 나타냅니다.
6. destination 연결
action은 대상 간의 논리적 연결입니다. action은 navi graph에서 화살표로 표시됩니다.
action 일반적으로 한 destination을 다른 destination에 연결하지만 앱의 어디에서나 특정 destination으로 이동하는 전역 action을 만들 수도 있습니다.
action 통해 사용자가 앱을 통해 취할 수 있는 다양한 경로를 나타낸다, 실제로 destination로 이동하려면 탐색을 수행하는 코드를 작성해주면된다.
Type - “Action”
ID - 코드상 id
Destination - 도착하려는 destination
7. Navigate to a destination
destination탐색은 NavHost 내에서 앱 navi 을 관리하는 객체인 NavController를 사용하여 수행됩니다.
NavHost에는 해당하는 자체 NavController가 있습니다.
NavController를 검색방법
- Fragment.findNavController()
- View.findNavController()
- Activity.findNavController(viewId: Int)
FragmentContainerView를 사용하여 NavHostFragment를 생성하거나, FragmentTransaction을 통해 Activity에 NavHostFragment를 수동으로 추가하는 경우, Navigation.findNavController(Activity, @IdRes int)를 통해 Activity의 onCreate()에서 NavController를 검색하려는 시도는 실패합니다. 대신 NavHostFragment에서 직접 NavController를 검색해야 합니다.
val navHostFragment =
supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController
class MainActivity : AppCompatActivity() {
private var _binding: ActivityMainBinding? = null
private val binding
get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
_binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// 네비게이션 컨트롤러를 찾을수 없음
// val navController = findNavController(R.id.nav_host_fragment)
val navHostFragment =
supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController
binding.button.setOnClickListener {
navController.navigate(R.id.action_firstFragment_to_secondFragment)
}
}
}
8. Safe Args를 사용하여 Type 안전 보장
Safe Args를 plugin 설치후 생성된 코드에는 정의한 각 Action에 대한 클래스(XXXFragmentDirection) 및 메서드와 각 전송 및 수신 Destination에 해당하는 클래스가 포함된다.
Safe Args는 Action 시작된 각 Destination에 대한 클래스를 생성합니다.
생성된 클래스 이름은 원래 Destination 클래스 이름에 "Direction"를 추가된다. (XXXFragmentDirection)
생성된 클래스에는 원래 Destination에 정의된 각 Action에 대한 static method가 포함되어 있습니다.
이 메서드는 Action에 필요한 매개변수를 인수로 사용하고 Navigation()에 전달할 수 있는 NavDirections 객체를 반환합니다.
'Android Jetpack Architecture > Navigation' 카테고리의 다른 글
중첩 네비 그래프 (Nested Navi Graph) (0) | 2021.11.19 |
---|---|
Navigation graph design 네비 그래프 디자인 (0) | 2021.11.18 |
destinations 생성 (0) | 2021.11.15 |
android navigation의 원칙 (0) | 2021.11.12 |
Navigation (0) | 2021.02.18 |