난 정말 최고야 멋있어
android navigation 본문
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