2016-11-07 100 views
8

我正在使用MVVM和DataBinding构建Android应用程序。我的ViewModel中有一个启动Activity的函数。 可以在ViewModel中使用onClick调用吗?Android MVVM的最佳实践startActivity

像这样。

public class MyViewModel { 
    public void onClick(View view, long productId) { 
     Context context = view.getContext(); 
     Intent intent = new Intent(context, ProductDetailActivity.class); 
     intent.putExtra("productId", productId); 
     context.startActivity(intent); 
    } 
} 

在我的XML:

... 
android:onClick="@{(v) -> viewModel.onClick(v, viewModel.product.id)}"> 

或者会是最好的做法在我的视图模型将其移动到视图和EventBus或Rx调用它,只有POJO?

回答

7

回答你的问题是什么是你的目标?

如果您想使用MVVM进行问题分离,以便您可以对您的Viewmodel进行单元测试,那么您应该尽量将所有需要将Context与Viewmodel分开的东西。 Viewmodel包含应用程序的核心业务逻辑,应该没有外部依赖关系。

但是我喜欢你要去的地方:)如果决定打开哪个Activity位于View中,那么为它编写JUnit测试非常困难。但是,您可以将对象传递给执行startActivity()调用的视图模型。现在在您的单元测试中,您可以简单地模拟此对象并验证是否打开了正确的活动

+0

“Viewmodel包含应用程序的核心业务逻辑,应该没有外部依赖关系。” - 我认为它总会有外部依赖。我没有看到使用ViewModel没有数据绑定的一点,它是特定于android的,只需检查示例import:“import android.databinding.ObservableBoolean;” – LLL