Android ViewModel и прослушиватели кликов - PullRequest
0 голосов
/ 12 июля 2020

Переходя от MVP к viewModels, я чувствую, что немного заблудился, когда дело доходит до того, где разместить код. Один из примеров - где разместить слушателей кликов. в MVP я бы сделал что-то вроде этого

myButton.setOnClickListener { presenter.onMyButtonClicked }

должен ли я делать то же самое с ViewModel? Я так не думаю. потому что это означает, что я обрабатываю модель просмотра, как если бы она была презентатором. как и должно быть.

Где наиболее подходящее место для работы с прослушивателем кликов?

Ответы [ 2 ]

1 голос
/ 12 июля 2020

Лучшее место для добавления прослушивателя OnClick - это модель представления при использовании архитектуры MVVM. в архитектуре MVVM с привязкой данных вы можете обрабатывать прослушиватель щелчка разными способами.

<Button
  onClick="@{()->viewModel.onMyButtonClicked()}"/>



 <Button 
      onClick="@{(view)->viewModel.onMyButtonClicked(view)}"/>

В этом случае нет необходимости указывать идентификатор для каждого. Для этого сначала вам нужно зарегистрировать ViewModel в своей деятельности. в Activity onCreate вы должны установить представление содержимого, как я упоминал ниже.

ActivityMainBinding activityMainBinding = DataBindingUtils.setContentView(this,R.layout.activity_main);
activityMainBinding.viewModel = MyViewModel(application)
activityMainBinding.lifecycleOwner = this;

после этого в вашем файле макета вам нужно добавить переменную ViewModel

<layout>
    <data>
        <variable
            name="viewModel"
            type=".MyViewModel" />
    </data>
    ......
    ......
   . .....

<Button
  onClick="@{()->viewModel.onMyButtonClicked()}"/>



 <Button 
      onClick="@{(view)->viewModel.onMyButtonClicked(view)}"/>


</layout>

, затем Если вы хотите чтобы внести какие-либо изменения в Activity, вы должны использовать наблюдаемые переменные. эту наблюдаемую переменную, которую вы должны наблюдать в классе активности. в зависимости от значения, которое вы должны выполнить.

0 голосов
/ 12 июля 2020

Вы должны поместить свой прослушиватель кликов либо в onViewCreated() Meathod вашего Fragment класса, либо в onCreate() Meathod вашего Activity класса, в зависимости от того, где объявлена ​​кнопка.

...