【问题标题】:Location of click event in MVVM architectureMVVM 架构中点击事件的位置
【发布时间】:2019-01-16 23:28:25
【问题描述】:

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

欢迎举例……

【问题讨论】:

    标签: android mvvm data-binding android-databinding


    【解决方案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_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)}"/>
    

    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}"/>
    

    更多信息请查看官方文档here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 2017-06-28
      • 1970-01-01
      • 2018-09-05
      • 2021-11-07
      • 2017-05-26
      • 1970-01-01
      相关资源
      最近更新 更多