Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 스택 자바 코드
- rxjava hot observable
- Rxjava Observable
- 안드로이드 os 구조
- 안드로이드 라이선스
- rxjava disposable
- 안드로이드 유닛테스트란
- 2022 플러터 설치
- 안드로이드 유닛 테스트
- 안드로이드 라이선스 종류
- 스택 큐 차이
- 클래스
- 안드로이드 유닛 테스트 예시
- 서비스 쓰레드 차이
- 안드로이드 레트로핏 사용법
- jvm이란
- 객체
- 자바 다형성
- 2022 플러터 안드로이드 스튜디오
- ANR이란
- 멤버변수
- 안드로이드 레트로핏 crud
- android retrofit login
- 서비스 vs 쓰레드
- jvm 작동 원리
- 큐 자바 코드
- ar vr 차이
- android ar 개발
- 플러터 설치 2022
- rxjava cold observable
Archives
- Today
- Total
나만을 위한 블로그
[Manifest-Android] 18. 액티비티, 프래그먼트 간 데이터 전달 본문
728x90
반응형
액티비티 간 데이터 전달
가장 일반적인 메커니즘은 인텐트다. 데이터는 키밸류 쌍으로 인텐트에 추가되며 받는 액티비티는 getIntent로 그 데이터를 가져온다.
// 보내는 액티비티
val intent = Intent(this, SecondActivity::class.java).apply {
putExtra("USER_NAME", "John Doe")
putExtra("USER_AGE", 25)
}
startActivity(intent)
// 받는 액티비티
class SecondActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
val userName = intent.getStringExtra("USER_NAME")
val userAge = intent.getIntExtra("USER_AGE", 0)
Log.d("SecondActivity", "User Name: $userName, Age: $userAge")
}
}
프래그먼트 간 데이터 전달
전송하는 프래그먼트는 키밸류 쌍으로 구성된 번들을 만들고 매개변수로 보내서 받는 프래그먼트에 전달한다.
제트팩 네비게이션 라이브러리를 써서 프래그먼트 간 데이터 전달
제트팩 네비게이션 라이브러리, safeArgs를 같이 쓸 때 목적지 간 타입 안전 네비게이션을 가능하게 하는 direction, argument 클래스를 만들 수 있다.
Shared ViewModel 활용
같은 액티비티 안에서 프래그먼트끼리 통신해야 할 경우 shared viewmodel 사용이 권장된다.
shared viewmodel은 같은 액티비티 안의 여러 프래그먼트 간 공유되는 뷰모델 인스턴스를 말한다. 제트팩의 androidx.fragment:fragment-ktx 패키지에서 ㅈ공하는 activityViewModels()를 써서 구현된다.
activityViewModels()는 뷰모델의 scope를 액티비티에 지정해서 프래그먼트가 같은 뷰모델 인스턴스에 접근하고 공유할 수 있게 한다. 이것은 프래그먼트 간의 밀접한 결합을 피하고 생명주기를 인식하는 반응형 데이터 공유를 가능하게 한다.
// Shared ViewModel
class SharedViewModel: ViewModel() {
private val _userData = MutableStateFlow<User?>(null)
val userData: StateFlow<User?> = _userData
fun setUserData(user: User) {
_userData.value = user
}
}
// Fragment A (Sending data)
class FirstFragment : Fragment() {
private val sharedViewModel: SharedViewModel by activityViewModels()
fun updateUser(user: User) {
sharedViewModel.setUserData(user)
}
}
// Fragment B (Receiving data on another Fragment)
class SecondFragment : Fragment() {
private val sharedViewModel: SharedViewModel by activityViewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
lifecycleScope.launch {
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.RESUMED) {
sharedViewModel.userData.collectLatest { user ->
// handle user data here
}
}
}
}
}
// Activity (Receiving data on the Activity)
class MainActivity : ComponentActivity() {
private val sharedViewModel: SharedViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
lifecycleScope.launch {
lifecycle.repeatOnLifecycle(Lifecycle.State.RESUMED) {
sharedViewModel.userData.collectLatest { user ->
// handle user data here
}
}
}
}
}
반응형
'스터디' 카테고리의 다른 글
[Manifest-Android] 20. 구성 변경 시 액티비티에 생기는 변화 (0) | 2025.06.30 |
---|---|
[Manifest-Android] 19. Fragment Result API (0) | 2025.06.30 |
[Manifest-Android] 17. Bundle (0) | 2025.06.30 |
[Manifest-Android] 16. Task, Back Stack (0) | 2025.06.30 |
[Manifest-Android] 15. 딥링크 (0) | 2025.06.23 |
Comments