我正在使用 MVVM 和 DataBinding 构建一个 Android 应用程序。我的 ViewModel 中有一个启动 Activity 的函数。在 ViewModel 中调用 onClick 可以吗?
像这样。
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)}">
或者将它移动到 View 并从 EventBus 或 Rx 调用它并且在我的 ViewModel 中只有 POJO 是最佳实践吗?
原文由 Felipe Kenji Shiba 发布,翻译遵循 CC BY-SA 4.0 许可协议
你的问题的答案是你的目标是什么?
如果您想使用 MVVM 来分离关注点,以便您可以对您的
Viewmodel
进行单元测试,那么您应该尝试将需要Context
的所有内容与您的Viewmodel
分开---
。Viewmodel
包含您应用程序的核心业务逻辑,应该没有外部依赖项。但是我喜欢你要去的地方 :) 如果打开哪个 Activity 的决定在于视图,那么为它编写 JUnit 测试就非常非常困难。但是,您可以将对象传递给
Viewmodel
执行startActivity()
调用。现在在你的 单元测试 中,你可以简单地模拟这个对象并验证是否打开了正确的Activity