일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Design Pattern
- Observer Pattern
- designPattern
- ㅓ
- Singleton
- 옵저버 패턴
- Functional Programming
- factory method
- 팩토리 메소드
- 디자인패턴 #
- 추상팩토리패턴
- 싱글톤
- 함수형프로그래밍
- Abstract Factory
- 추상 팩토리
- builderPattern
- El
- r
- ㅋㅁ
- a
- PrototypePattern
- Kotlin
- 코틀린
- F
- 프로토타입 패턴
- 빌터패턴
- 디자인패턴
- Today
- Total
오늘도 더 나은 코드를 작성하였습니까?
navigation event listener 본문
NavController와의 상호작용은 destination 간 탐색을 위한 기본 방법입니다.
NavController는 NavHost의 콘텐츠를 새로운 destination으로 대체합니다
대부분의 경우 UI 요소(예: 상단 AppBar 또는 BottomNavigationBar 같은 기타 영구 탐색 컨트롤)는 NavHost 외부에 존재하며 대상 간을 탐색할 때 업데이트되어야 합니다
NavController는 NavController의 현재 destination 또는 그 인수가 변경될 때 호출되는 OnDestinationChangedListener 인터페이스를 제공합니다. 리스너는 addOnDestinationChangedListener() 메서드를 통해 등록될 수 있습니다.
addOnDestinationChangedListener()를 호출할 때 현재 destination 있다면 즉시 리스너로 전송됩니다.
NavigationUI는 OnDestinationChangedListener를 사용하여 이런 공통 UI 구성요소가 탐색을 인식하도록 합니다.
OnDestinationChangedListener를 자체적으로 사용하여 모든 맞춤 UI 또는 비즈니스 로직이 탐색 이벤트를 인식하도록 할 수도 있습니다. 예를 들어 앱의 일부 영역에서는 표시하고 다른 영역에서는 숨기려는 공통 UI 요소가 있을 수 있습니다. 다음 예에서와 같이 자체 OnDestinationChangedListener를 사용하면 타겟 대상에 따라 이러한 UI 요소를 선택적으로 표시하거나 숨길 수 있습니다.
q2
navController.addOnDestinationChangedListener { _, destination, _ ->
if(destination.id == R.id.full_screen_destination) {
toolbar.visibility = View.GONE
bottomNavigationView.visibility = View.GONE
} else {
toolbar.visibility = View.VISIBLE
bottomNavigationView.visibility = View.VISIBLE
}
}
Argument-based listeners
다른 방법으로는 navi graph 내에서 default value가 지정된 argument를 사용할 수도 있습니다.
argument는 해당 UI 컨트롤러에서 상태를 업데이트하는 데 사용할 수 있습니다.
<?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"
android:id="@+id/navigation\_graph"
app:startDestination="@id/fragmentOne">
<fragment
android:id="@+id/fragmentOne"
android:name="com.example.android.navigation.FragmentOne"
android:label="FragmentOne">
<action
android:id="@+id/action\_fragmentOne\_to\_fragmentTwo"
app:destination="@id/fragmentTwo" />
</fragment>
<fragment
android:id="@+id/fragmentTwo"
android:name="com.example.android.navigation.FragmentTwo"
android:label="FragmentTwo">
<argument
android:name="ShowAppBar"
android:defaultValue="true" />
</fragment>
</navigation>
이 argument는 destination로 이동할 때 사용되지 않고 defaultValue를 사용하여 destination에 추가 정보를 첨부하는 방법으로 사용됩니다. 이 destination에 있을 때 앱 바를 표시할지 여부를 나타냅니다.
navController.addOnDestinationChangedListener { _, _, arguments ->
appBar.isVisible = arguments?.getBoolean("ShowAppBar", false) == true
}
NavController는 탐색 destination이 변경될 때마다 이 콜백을 호출합니다.
Activity는 이제 콜백에서 수신된 인수를 기반으로 소유한 UI 구성요소의 상태 또는 가시성을 업데이트할 수 있습니다.
이 접근 방식의 한 가지 장점은 Activity가 navi graph의 argument만 보고 개별 Fragment 역할과 책임을 알지 못한다는 것입니다.
개별 프래그먼트는 포함하는 Activity 및 소유하는 UI 구성 요소에 대해 알지 못합니다.
'Android Jetpack Architecture > Navigation' 카테고리의 다른 글
android Navigation (Destination 데이터 전달) (0) | 2021.11.29 |
---|---|
Conditional navigation(조건부 네비게이션) (1) | 2021.11.26 |
Navigation and the back stack(네비게이션과 백 스택) (0) | 2021.11.19 |
Destination으로 이동하기. (0) | 2021.11.19 |
Global Action (0) | 2021.11.19 |