MVVM体系结构中单击事件的位置 [英] Location of click event in MVVM architecture

查看:380
本文介绍了MVVM体系结构中单击事件的位置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将MVVM与数据绑定一起使用.在哪里应该编写click事件(Viewmodel或Activity)

I'm trying to use MVVM with databinding .. Where should I write click event (Viewmodel Or Activity)

欢迎示例...

推荐答案

您可以在其中任一事件上编写点击事件.就个人而言,我的偏好取决于我想要实现的目标以及实现它所需要的目标.

You can write your click events on either. Personally, my preference depends on what I want to achieve and what I need to achieve it.

ViewModel中的点击事件

Click event in ViewModel

定义您的ViewModel.通过回调与您的活动进行交流.

Define your ViewModel. Communicate with your activity via a Callback.

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();
    }
}

在您的活动中实施此回调:

Implement this callback in your activity:

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.然后执行以下操作:

Pass your ViewModel as a variable to your XML. Then do this:

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/button_background"
    android:layout_margin="20dp"
    tools:text="CLICK ME!!!"
    android:textColor="@android:color/white"
    android:onClick="@{() -> ViewModel.doOnClick(ViewModel.callback)}"/>

活动中的点击事件

Click events in 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_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/button_background"
    android:layout_margin="20dp"
    android:text="@string/verify"
    android:textColor="@android:color/white"
    android:onClick="@{ClickHandler::onClickMeClicked}"/>

有关更多信息,请在此处

这篇关于MVVM体系结构中单击事件的位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆