BaseActivity как владелец жизненного цикла для привязки данных - PullRequest
0 голосов
/ 28 апреля 2020

Структура моего проекта имеет базовую активность, которая расширяется несколькими дочерними действиями, поэтому структура выглядит как

                  BaseActivity
                        ^
                        | 
          -------------------------------
          |             |               |
 ChildActivityA  ChildActivityB  ChildActivityC

Я использую DataBinding с LiveData, и, следовательно, каждый раз, когда мне нужно установить вверх lifecycleOwner для соответствующего класса привязки, т. е. (в ChildActivityA)

  val binding = DataBindingUtil.setContentView(R.layout.somelayout)
  binding.lifecycleOwner = this@ChildActivityA

Теперь мне нужно повторить этот шаблон в каждом Activity, поэтому вместо этого я создал вспомогательную функцию расширения, чтобы заменить два вышеупомянутых то есть

fun <T : ViewDataBinding> BaseActivity.setDataBindingView(layoutId: Int): T {
   val binding = DataBindingUtil.setContentView(this, layoutId)
   binding.lifecycleOwner = this@BaseActivity
}

, а затем вызовите мой ChildActivityA как

val binding = setDataBindingView(R.layout.someLayout)

Как видите, binding.lifecycleOwner установлен на BaseActivity вместо фактического ChildActivityA Теперь это вызовет какие-либо проблемы? Будет ли binding.lifecycleOwner продолжать следовать жизненному циклу ChildActivityA?

1 Ответ

1 голос
/ 28 апреля 2020

this@ChildActivityA и this@BaseActivity ссылаются на один и тот же фактический объект в памяти - существует только один объект активности. Поэтому они полностью эквивалентны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...