activity간 데이터전달은 intent를 이용해 많이 구현한다. 하지만 fragment간에 데이터를 교환하며 전환을 하거나 화면회전을 하더라도(안드로이드는 보통 화면을 가로 세로로 전환하면 기존 화면에 나오던 데이터 들이 싹 날라간다ㅜㅜㅜㅜ) 이용하기 위해 ViewModel을 이용해보려 한다. 다음에는 navigaion의 argument기능을 이용할 것이다..!
나는 회원가입에 필요한 데이터 저장을 위해 SignUpViewModel을 만들었다
class SignUpViewModel: ViewModel(){
var preferences=mutableListOf<String>()
var userId=""
var password=""
var email=""
var username=""
var phoneNum=""
}
fragment에서 이미 만들어둔 ViewModel을 사용할 때는 by를 이용하지만 바로 불러올 경우 해당 fragment의 수명과 동일하므로 Activity의 수명과 동일하도록 activityViewModels()과 같은 형태로 불러온다.
class ChoosePreferFragment : Fragment() {
val signUpViewModel by activityViewModels<SignUpViewModel>()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
signUpViewModel.preferences...
}
}
developers 공식문서를 참고하여 작성하였습니다.