뚜벅이!
Mobile :)
뚜벅이!
전체 방문자
오늘
어제
  • 분류 전체보기 (53)
    • 코딩테스트 (16)
      • programmers level1 (7)
      • codility (9)
    • 프로그래밍 공부 (31)
      • Spring Boot (6)
      • Nuxt.js (5)
      • Node.js (3)
      • Etc (11)
      • Android (6)
    • 잡다한 글 (4)
    • 토이프로젝트 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • token
  • Vue
  • firebase
  • Notification
  • lesson4
  • programmers
  • node
  • codillity
  • lesson2
  • Vue.js
  • lesson3
  • ad
  • javascript
  • NavBar
  • nuxt.js
  • Kotlin
  • 부트
  • JS
  • Jetpack
  • 스킬체크테스트
  • nuxt
  • 프로그래머스
  • AndroidX
  • level1
  • Spring boot
  • 초보자
  • docker
  • 연습
  • node.js
  • Spring

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
뚜벅이!

Mobile :)

[kotlin] Android jetpack Navigation
프로그래밍 공부/Android

[kotlin] Android jetpack Navigation

2021. 5. 14. 14:43
728x90

프로젝트에는 딱히 필요없는 부분이었지만 , 써보고 싶어서 써보는 Navigation 기능.

Fragment나 Activity 관계없이 일관된 API 를 제공하는것이 매력적으로 보였다.

(기존 중첩 Fragment에 있던 Animation 버그를 효과적으로 컨트롤하는 것으로도 꽤 좋은 성능을 보여준다)

 

 

https://developer.android.com/jetpack/androidx/releases/navigation

 

Navigation  |  Android 개발자  |  Android Developers

Navigation Navigation은 Android 애플리케이션 내에서 '대상' 사이를 탐색하는 프레임워크로, 대상이 Fragment, Activity 또는 기타 구성요소로 구현되었는지에 관계없이 일관된 API를 제공합니다. 이 표에는

developer.android.com

 

 

별다른 기능없이 카메라(CameraX 이것도 처음써본다.)를 켤때, 권한받는 간단한 예제를 구현해보려고 한다.

우선 종속 추가해주고,

dependencies {

    def camerax_version = "1.0.0-beta08"
    
    //camera
    implementation "androidx.camera:camera-core:${camerax_version}"
    implementation "androidx.camera:camera-camera2:${camerax_version}"
    implementation "androidx.camera:camera-lifecycle:${camerax_version}"
    implementation "androidx.camera:camera-view:1.0.0-alpha15"

    def nav_version = "2.3.0"
    implementation "androidx.navigation:navigation-runtime-ktx:$nav_version"
    implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
    implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
}

 

혼합모듈 추가

apply plugin: "androidx.navigation.safeargs"

 

 

 

gradle.properties에 android.useAndroidX=true 구문을 추가해준다.

# AndroidX package structure to make it clearer which packages are bundled with the
# Android operating system, and which are packaged with your app's APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true

 

 

이제 nav를 정의해보자 nav_gragh.xml 이란 파일을 만들고,

작성하면

<?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/nav_graph"
    app:startDestination="@id/permissions_fragment">

    <fragment
        android:id="@+id/permissions_fragment"
        android:name="com.nav.test.fragment.PermissionsFragment"
        android:label="PermissionsFragment" >

        <action
            android:id="@+id/action_permissions_to_camera"
            app:destination="@id/camera_fragment"
            app:popUpTo="@id/permissions_fragment"
            app:popUpToInclusive="true" />

    </fragment>

    <fragment
        android:id="@+id/camera_fragment"
        android:name="com.nav.test.fragment.CameraFragment"
        android:label="CameraFragment" >

        <action
            android:id="@+id/action_camera_to_permissions"
            app:destination="@id/permissions_fragment"
            app:popUpTo="@id/camera_fragment"
            app:popUpToInclusive="true"/>

    </fragment>

</navigation>

어메이징.. UI로 표기되어 알기쉽게 구성되어있다.

 

StartDestination 으로 시작하는곳을 정해주고, action으로 어디가 목적지인지 정해준다.

popUpTo 는 특정 위치로 돌아가게끔, popUpToInClusive로 추가목적지를 팝 할수있다. 와우..

 

 

Fragment 내용까지 포함하면 내용이 너무 길어지므로 fragment 코드는 생략

 

 

적용한 프로젝트는

권한체크 -> 카메라 -> 갤러리 -> 사진편집 기능으로 이어지게끔 작성해 두었고,

nav는 써본것으로 만족해서 카메라까지만 연동해두었다.

 

 

이동하려면 이런식으로 이동할 수 있다.

Navigation.findNavController(requireActivity(), R.id.fragment_container).navigate(
PermissionsFragmentDirections.actionPermissionsToCamera())

데이터 전송도 

findNavController().navigate( ... ).putObject(여기)

받는 방법도

argument?.getObject()

 

결국, bundle을 사용하는 방법이라 친숙해서 금방 적응할 수 있다.

728x90
저작자표시 (새창열림)

'프로그래밍 공부 > Android' 카테고리의 다른 글

[android] context 란  (0) 2022.12.21
[android-kotlin] firebase notification / message  (0) 2022.07.14
[android] migration 진행중 ... kotlin v, IDE v, library v...etc...  (0) 2022.03.29
[kotlin] LiveData & DataBinding  (0) 2021.07.20
[Android&Kotlin] gps tracking  (3) 2021.02.04
    '프로그래밍 공부/Android' 카테고리의 다른 글
    • [android-kotlin] firebase notification / message
    • [android] migration 진행중 ... kotlin v, IDE v, library v...etc...
    • [kotlin] LiveData & DataBinding
    • [Android&Kotlin] gps tracking
    뚜벅이!
    뚜벅이!
    2022. 4년차 안드로이드 개발자 wndnjs19@gmail.com

    티스토리툴바