I implemented a Fragment that initially implemented android.arch.lifecycle.Observer and I wanted to start observing some other live data but can't. I started with this:
class MyFragment : BaseFragment(), Observer<FragmentData> {
lateinit var viewModel: MyViewModel
override fun onActivityCreated(savedInstanceState: Bundle?) {
viewModel.fragmentData.observe(this, this)
}
override fun onChanged(data: FragmentData?) {
activity?.title = getTitleFromData(data)
}
}
If I update the class to include the other observable data like this:
class MyFragment : BaseFragment(), Observer<FragmentData>, Observer<OtherData> {
lateinit var viewModel: MyViewModel
override fun onActivityCreated(savedInstanceState: Bundle?) {
viewModel.fragmentData.observe(this, this)
}
override fun onChanged(otherData: OtherData) {
// update UI from otherData
}
override fun onChanged(data: FragmentData?) {
activity?.title = getTitleFromData(data)
}
}
I get an error:
Type parameter T of 'Observer' has inconsistent values: FragmentData, OtherData A supertype appears twice
I would like some help understanding why the compiler isn't able to discern the difference between the types and wondered the best alternative pattern.
something like this?:
viewModel.fragmentData.observe(this, fragmentDataObserver)
private val fragmentDataObserver = Observer<Fragmentdata> {
activity?.title = getTitleFromData(it)
}