Я реализовал фрагмент, который изначально реализовал android.arch.lifecycle.Observer, и я хотел начать наблюдать за некоторыми другими данными в реальном времени, но не могу. Я начал с этого:
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)
}
}
Если я обновлю класс, чтобы включить другие наблюдаемые данные, например:
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)
}
}
Я получаю сообщение об ошибке:
Параметр типа T в 'Observer' имеет несовместимые значения: FragmentData, OtherData. Супертип появляется дважды.
Мне нужна помощь в понимании того, почему компилятор не может различить разницу между типами и задается вопросом о наилучшем альтернативном шаблоне.
что-то вроде этого?:
viewModel.fragmentData.observe(this, fragmentDataObserver)
private val fragmentDataObserver = Observer<Fragmentdata> {
activity?.title = getTitleFromData(it)
}
Observer
. - person CommonsWare   schedule 07.07.2018public class Scrap implements Observer<String>, Observer<Boolean>
приводит к ошибке синтаксиса дублирующегося класса. - person CommonsWare   schedule 07.07.2018