Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- UiState
- ListAdapter
- sharedFlow
- NavHost
- 회원가입
- MVVM
- NavController
- 리사이클러뷰
- Android
- Kotlin
- 컴포즈
- 뷰
- cleanarchitecture
- Build variants
- 코딩테스트
- 알고리즘
- 클린아키텍처
- Flow
- coroutine
- Authentication
- Jetpack
- Compose
- 안드로이드
- 로그인
- 파이어베이스
- XML
- 플레이스토어
- 커스텀뷰
- 코틀린
- DiffUtil
Archives
- Today
- Total
Grusie 안드로이드 개발 기술 블로그
[Android] JetPack:Compose 네비게이션(navigation) - 2 본문
728x90
반응형
SMALL
지난 번에 JetPack 네비게이션에 대해서 익히고 실제로 사용도 해보았으나, 데이터 전송에 대한 부분은 다루지 않았었다.
이번엔 네비게이션을 사용할 때 데이터를 전송하는 법에 대해서 알아보도록 하자.
composable(
route = Screen.Second.name
) {
SecondScreen(
modifier = Modifier
.fillMaxSize()
.padding(8.dp),
items = testItems,
onItemClicked = { item -> navController.navigate("${Screen.Third.name}/$item") })
}
우선 데이터를 전송할 SecondScreen에서 아이템이 클릭 되면, navigate()를 사용해 데이터를 전달할 수 있도록, 클릭된 아이템의 값을 url과 같은 형태로 전송한다.
composable(
route = "${Screen.Third.name}/{item}",
arguments = listOf(navArgument("item") {
type = NavType.StringType
})
) {
backStackEntry ->
val receivedItem = backStackEntry.arguments?.getString("item") ?: ""
val context = LocalContext.current
ThirdScreen(
onBackBtnClicked = {
navController.popBackStack(
Screen.First.name,
false
)
},
item = receivedItem,
onSharedBtnClicked = { text1, text2 ->
shareData(context, text1, text2)
}
)
}
아이템을 받는 쪽에서는 route에 전달 받을 키값을 사용하여 작성해두고, arguments 파라미터에, 키값과 type을 List형태로 추가한다.
backStackEntry를 통해 이전 페이지에서 전달 받은 arguments 들 중에서, "item"이라는 키값을 가진 String값을 가져와, ThirdScreen에 파라미터로 넘겨 사용하게 된다.
@Composable
fun ThirdScreen(
onBackBtnClicked: () -> Unit,
item: String,
onSharedBtnClicked: (String, String) -> Unit
) {
Row(
modifier = Modifier.fillMaxSize(),
horizontalArrangement = Arrangement.SpaceEvenly,
verticalAlignment = Alignment.CenterVertically
) {
Button(onClick = { onBackBtnClicked() }) {
Text(text = "backButton")
}
Button(onClick = { onSharedBtnClicked("text1", item) }) {
Text(text = "sharedButton")
}
}
}
ThirdScreen에서는 전달 받은 아이템을 가지고, SharedBtnClicked를 호출해, 전달이 잘 되었는지 확인한다.
무사히 11이 뜨는 것을 확인할 수 있다.
후기
데이터를 전달하는 법 중 가장 간단한 방법에 대해 알아보았다, 다른 방법으로는 enum class가 아닌 sealed class나 인터페이스를 사용하여 데이터를 전달하는 방법으로, 전달하는 객체의 타입에 상관없이 전달 할 수 있도록 하는 방법이 있다.
소스코드
https://github.com/Grusie/blog-source/tree/master/TestNavigation
반응형
LIST
'안드로이드 개발 > 라이브러리' 카테고리의 다른 글
[Android]RxJava 사용하기 (0) | 2024.04.15 |
---|---|
[Android] Retrofit2 사용법 (0) | 2024.03.27 |
[Android] Compose + Paging 검색 기능 만들기(Flow - debounce) (1) | 2024.03.12 |
[Android] JetPack:Compose 네비게이션(navigation) - 1 (0) | 2024.03.06 |
[Android] Paging 3.0 라이브러리 (0) | 2024.02.29 |