MVVM 架构中点击事件的位置
Posted
技术标签:
【中文标题】MVVM 架构中点击事件的位置【英文标题】:Location of click event in MVVM architecture 【发布时间】:2019-01-16 23:28:25 【问题描述】:我正在尝试将 MVVM 与数据绑定一起使用。我应该在哪里编写点击事件(Viewmodel 或 Activity)
欢迎举例……
【问题讨论】:
【参考方案1】:您可以在其中任何一个上编写您的点击事件。就个人而言,我的偏好取决于我想要实现什么以及实现它需要什么。
ViewModel 中的点击事件
定义您的 ViewModel。通过回调与您的活动进行通信。
public class MyViewModel extends ViewModel
private MyCustomCallback callback;
...
public void doOnClick(MyCustomCallback mCallback)
boolean isSuccessful = doMyAction.execute();
if (isSuccessful)
mCallback.actionIsSuccessful();
else
mCallback.actionFailed();
...
public void setCallback(callback)
this.callback = callback;
public MyCustomCallback getCallback()
return this.callback;
...
public interface MyCustomCallback
void actionIsSuccessful();
void actionFailed();
在您的活动中实现此回调:
public class MyActivity extends AppCompatActivity
...
private MyCustomCallback callback;
@Override
protected void onCreate(Bundle savedInstanceState)
...
callback = new MyViewModel.MyCustomCallback
@Override
public void actionIsSuccessful()
//do something when action is successful
@Override
public void actionFailed()
//do something when action fails
viewModel.setCallback(callback);
将您的 ViewModel 作为变量传递给您的 XML。然后这样做:
<Button
android:layout_
android:layout_
android:background="@drawable/button_background"
android:layout_margin="20dp"
tools:text="CLICK ME!!!"
android:textColor="@android:color/white"
android:onClick="@() -> ViewModel.doOnClick(ViewModel.callback)"/>
Activity 中的点击事件
public class MyActivity extends AppCompatActivity
...
private MyCustomCallback callback;
@Override
protected void onCreate(Bundle savedInstanceState)
//initialize your binding
...
binding.setClickHandler(new MyActivityClickHandler());
public class MyActivityClickHandler
public void onClickMeClicked(View view)
//do something
然后在你的 XML 中:
<Button
android:layout_
android:layout_
android:background="@drawable/button_background"
android:layout_margin="20dp"
android:text="@string/verify"
android:textColor="@android:color/white"
android:onClick="@ClickHandler::onClickMeClicked"/>
更多信息请查看官方文档here
【讨论】:
以上是关于MVVM 架构中点击事件的位置的主要内容,如果未能解决你的问题,请参考以下文章