Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
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
Tags more
Archives
Today
Total
관리 메뉴

난 정말 최고야 멋있어

android navigation 본문

카테고리 없음

android navigation

n00bh4cker 2020. 5. 21. 14:14

navigation 사용법 간단한 정리

 

1. naviagition 리소스 파일 만들기

resource type : navigation 으로 지정해주기!

 

2. 네비게이션 리소스 파일 수정하기

디자인 모드로 들어가서 fragment 나 activity 들을 추가할 수 있음

네비게이션 루트 엘리먼트의 app:startDestination 으로 네비게이션뷰의 시작 위치를 지정해줄 수 있다.

추가로 여러개의 프래그먼트나 액티비티를 넣을 수 있고 디자인 모드에서 화살표를 끌어다 주는 방식으로 액션들을 정의 할 수 있다

이 액션들은 나중에 네비게이션 구성 요소간 전환을 위해 사용한다

 

 

3.액티비티에 네비게이션 추가하기

android:name ="androidx.navigation.fragment.NavHostFragment" 값 지정

app:navGraph 의 값으로 네비게이션 xml 파일을 지정 @navigation/xxx

* 추가로 app:defaultNavHost="true" 로 하면 시스템의 액티비티의 백스택을 네비게이션의 백스택으로 갈아끼울수 있다....

한 액티비티에 defaultNavHost="true"의 속성을 가진 네비게이션은 딱 하나여야 한다..

 

4. 네비게이션의 구성요소 간 이동하기

네비게이션을 이루는 프래그먼트의 소스코드로 이동해서

onClickListener 등을 설정해주는 방식으로 이동이 일어나게 할 수있다.

 

대충 이런 이동을 일어나게 하는 방식으로는 3가지 방법이 있는데

 

4 -1 . 기본적인 방법

 Navigation.findNavController(view).navigate(R.id.action_xxx_to_yyy)  

 Navigation.findNavController(activity, viewId).navigate(R.id.action_xxx_to_yyy

이런 코드를 호출하는 방법..

네비게이션 객체 ( view 객체의 부모 ) 를 찾기 위해서 Navigation에서 findNavController 를 제공해주는데

findNavController를 사용하여 네비게이션 객체를 찾고 .navigate() 메서드로 액션을 취해주는것이다!!

 

4-2. JetPack 라이브러리 이용 (아마 코틀린만 될거에여??)

view.findNavController().navigate()  

activity.findNavController(viewId).navigate()

음.. 1번 방식이랑 원리는 똑같음 근데 좀 더 보기 좋게 제트팩 라이브러리가 뷰의 메서드로 만들어준 것임

 

4-2. Navigation.createNaviagateOnClickListener( action ) 이용하기

이 함수를 이용하면 알아서 onClickListener 를 만들어 준다

그냥 SetOnClickListener 안에 박아주면 되는데..

코틀린을 이용하는 경우라면 주의 할 점이 있다

setOnClickListener{} 이런식으로 람다함수를 이용해 리스너를 정의하는 방식으로 집어넣으면 안된다

무조건 setOnClickListener() 의 인자로 넣어주는 방식이여야 한다

스택 오버플로우 형님 충성충성^^7

https://stackoverflow.com/questions/50328941/navigation-architecture-component-action-navigation-with-lambda-expression