2016-11-07 182 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