Fragment 사이의 데이타 전달 시 Viewmodel 를 사용하여 프로그램할 경우, 안드로이드 공식 문서에 따르면(참조: 다른 Fragment와 통신 ) 두 개 프레그먼트 간의 직접적인 데이타 전달은 지양된다.
두 Fragment 의 ViewModelProviders 액티비티 설정에 오류가 있었다.
Fragment1.kt 오류발생
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProviders.of(this).get(myViewModel::class.java)
}
일반적으로 ViewModelProviders.of(this) 사용으로 올바른 뷰모델의 사용이 되지 않아서 데이타 전달이 되지 못했다. 프래그멘트 안에서 사용할 경우,
ViewModelProviders.of(activity as MainActivity)
로 수정해야 했었다.
데이타를 업데이트 해야하는 Fragment2 에서는
Model.getText().observe(this, Observer<string> { t -> txtLanguage?.text("$t ,") })
가 아니라
Model.getText().observe(this, androidx.lifecycle.Observer<string> { t -> txtLanguage?.text("$t ,") })
로 수정해야 했었다.
Fragment2.kt
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
val Model = ViewModelProviders.of(activity as MainActivity).get(myViewModel::class.java)
Model.getText().observe(this, androidx.lifecycle.Observer<string> { t -> txtLanguage?.text("$t ,") })
}