Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MVVM中的Activity/Fragment和ViewModel应该做什么_Java_Android_Mvvm_Android Databinding - Fatal编程技术网

Java MVVM中的Activity/Fragment和ViewModel应该做什么

Java MVVM中的Activity/Fragment和ViewModel应该做什么,java,android,mvvm,android-databinding,Java,Android,Mvvm,Android Databinding,我们公司使用MVP模式开发Android应用已经有一段时间了。使用MVP,我们将所有业务逻辑放在presenter和Activity/Fragment中,然后在接收presenter的事件回调时只负责视图更新 现在,我们决定尝试使用Android数据绑定的MVVM。似乎有了MVVM,我们可以将所有业务逻辑放在ViewModel中(就像MVP中的Presenter一样),还可以将数据模型的任何更改通知给视图,所有这些都放在一个对象中 但是,这在我们的头脑中提出了一个问题,活动/片段应该处理什么?因

我们公司使用MVP模式开发Android应用已经有一段时间了。使用MVP,我们将所有业务逻辑放在presenter和Activity/Fragment中,然后在接收presenter的事件回调时只负责视图更新

现在,我们决定尝试使用Android数据绑定的MVVM。似乎有了MVVM,我们可以将所有业务逻辑放在ViewModel中(就像MVP中的Presenter一样),还可以将数据模型的任何更改通知给视图,所有这些都放在一个对象中

但是,这在我们的头脑中提出了一个问题,活动/片段应该处理什么?因为我们采用MVP模式来避免脂肪活动/碎片。我们不希望有苗条活动/片段,然后是肥胖视图模型

到目前为止,我们认为可以由活动/片段处理的内容

  • 请求/检查权限
  • 访问上下文
  • 获取资源
每一个更正、评论或建议都是受欢迎的,因为我是MVVM的新手,即使它看起来与MVP相似

多谢各位

再问一点问题

将MVVM与监听器(如MVP)结合起来是否可能并且是一种良好的实践?比如说

public class MainActivityViewModel extends BaseObservable {

    MainActivityViewModelListener listener;
    User user;

    public void setMainActivityViewModelListener(MainActivityViewModelListener listener) {
        this.listener = listener;
    }

    public void refreshUser(View v) {
        // some user update via Internet
        notifyPropertyChanged(BR.userAlias);

        if (listener != null) {
            listener.onUserRefreshed(user);
        }
    }

    @Bindable
    public void getUserAlias() {
        return user.getAlias();
    }
}

public interface MainActivityViewModelListener {
    void onUserRefreshed(User user);
}

public class MainActivity implements MainActivityViewModelListener {

    MainActivityBinding binding;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        binding = DataBindingUtil.setContentView(R.layout.main_activity);


        MainActivityViewModel viewModel = new MainActivityViewModel();
        viewModel.setMainActivityViewModelListener(this);
        binding.setMainActivityViewModel(viewModel);
    }

    @Override
    public void onUserRefreshed(User user) {
        // do some update
    }
}

是的,您可以在ViewModel中拥有所有业务逻辑,下面是我个人学习MVVM的一些链接




您可以提及ViewModel中的所有侦听器以及模型将包含的数据

ViewModel
更改某些内容并通知绑定框架内容已更改

模型-包含业务和验证逻辑的数据模型
看法- 定义屏幕上视图的结构、布局和外观
ViewModel-充当视图和模型之间的链接,处理任何 视图逻辑


您不应该在活动中设置侦听器

应尽可能将逻辑写入ViewModel

不久前我写了一个MVVM(数据绑定)的演示

希望它能帮助您:


您的问题的答案是,您可以像在mvp中一样在mvvm中使用接口侦听器吗?是的,但模式没有什么不同 你提到的代码

public interface MainActivityViewModelListener {
void onUserRefreshed(User user);
对于mvp类型的设计是可以的,但是对于mvvm,您应该使用适当的观察者注册和取消注册模式,包括通知观察者

在mvp中,我们直接调用接口函数,但mvvm中的观察者模式与这些简单的接口大不相同。观察者模式涉及主体注册到客户端类

如果您想了解Mvvm的具体工作原理,请参见此处


这是一个简单的应用程序,具有相同的功能,但使用三种不同的格式编写,以明确mvp mvvm和mvc之间的区别。到目前为止,我已经阅读了几个教程并尝试了一个实现示例,项目示例将非常有用!嘿@RaviRupareliya,片段事务和动画应该在活动上完成吗?