Navigation

2021. 8. 13. 16:55Android/AAC

  • navigation이란? 프래그먼트 간 전환을 위해 스토리보드를 통해 액션을 제공하는 라이브러리
  • navigation 사용법
    1. build 설정
    2. 사용할 프래그먼트 생성
    3. res > navigation > navigation파일에서 스토리보드 생성
    4. 액티비티 layout에서 navigation 설정
    5. (추가) type safety를 위한 설정

1. build 설정

def nav_version = "2.3.5"

// Kotlin
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

2. 사용할 프래그먼트 생성

// FirstFragment
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
  super.onViewCreated(view, savedInstanceState)

  val button = view.findViewById<Button>(R.id.button);
  button.setOnClickListener {
  // param이 있을 때
  val action = FirstFragmentDirections.actionFirstFragmentToSecondFragment("Hello")
  findNavController().navigate(action);

  // param이 없을 때
  //            findNavController().navigate(R.id.action_firstFragment_to_secondFragment); 

  }
}
// SecondFragment
val args: SecondFragmentArgs by navArgs()

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
  super.onViewCreated(view, savedInstanceState)
  val textView = view.findViewById<TextView>(R.id.textView)
  textView.text = args.text
}

3. res > navigation > navigation파일에서 스토리보드 생성


4. 액티비티 layout에서 navigation 설정

<androidx.fragment.app.FragmentContainerView
  android:id="@+id/fragment"
  android:name="androidx.navigation.fragment.NavHostFragment"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  app:defaultNavHost="true"
  app:navGraph="@navigation/nav_graph" />
class SubActivity : AppCompatActivity() {
    private lateinit var appBarConfiguration: AppBarConfiguration

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_sub)

	// AppBar 사용을 위한 코드(사용안할거면 패스)
        val navHostFragment =
            supportFragmentManager.findFragmentById(R.id.fragment) as NavHostFragment
        val navController = navHostFragment.navController
        appBarConfiguration = AppBarConfiguration(navController.graph)
        setupActionBarWithNavController(navController, appBarConfiguration)
    }

    override fun onSupportNavigateUp(): Boolean {
        val navController = findNavController(R.id.fragment)
        return navController.navigateUp(appBarConfiguration)
                || super.onSupportNavigateUp()
    }
}

5. (추가) type safety를 위한 설정

// build.gradle(:project)
dependencies{
  def nav_version = "2.3.5"

  classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
}

// build.gradle(:app)
plugins {
	...
    id 'androidx.navigation.safeargs'
}

공식 문서 : https://developer.android.com/guide/navigation/navigation-getting-started

 

탐색 구성요소 시작하기  |  Android 개발자  |  Android Developers

이 주제는 탐색 구성요소를 설정하고 사용하는 방법을 설명합니다. 탐색 구성요소의 대략적인 개요는 탐색 개요를 참고하세요. 환경 설정 참고: 탐색 구성요소는 Android 스튜디오 3.3 이상이 필요

developer.android.com

 

'Android > AAC' 카테고리의 다른 글

Compose 감잡기  (0) 2022.02.24
Jetpack - Compose  (0) 2021.10.28
DataBinding  (1) 2021.08.13
ViewModel  (1) 2021.08.12
LiveData  (0) 2021.08.12