implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.0-alpha01'
by viewModels()을 사용하려면 아래 종속성도 추가해주어야 한다.
android {
kotlinOptions {
jvmTarget = "1.8"
}
}
dependencies {
implementation 'androidx.activity:activity-ktx:1.1.0'
implementation 'androidx.fragment:fragment-ktx:1.2.5'
}
MyViewModel
class MyViewModel: ViewModel() {
val score = MutableLiveData<Int>(1)
/*: MutableLiveData<Int> by lazy {
MutableLiveData<Int>(1)
}*/
fun scorePlus() {
score.value = (score.value ?:0) + 1
}
fun scoreMinus() {
score.value = (score.value ?:0) - 1
}
}
Fragment1
class Fragment1: Fragment() {
lateinit var binding:Fragment1Binding
private val model: MyViewModel by activityViewModels()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = Fragment1Binding.inflate(inflater,container,false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.button.setOnClickListener {
model.scorePlus()
}
binding.button2.setOnClickListener {
model.scoreMinus()
}
}
}
Fragment2
class Fragment2: Fragment() {
lateinit var binding:Fragment2Binding
private val model: MyViewModel by activityViewModels()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = Fragment2Binding.inflate(inflater,container,false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
model.score.observe(viewLifecycleOwner, Observer {
binding.textView.text = it.toString()
})
}
}
MainActivity
class MainActivity : AppCompatActivity() {
private var binding: ActivityMainBinding? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding?.root)
}
}
