2016-11-07 9 views
8

MVVM 및 DataBinding을 사용하여 Android 앱을 제작 중입니다. 그리고 Activity를 시작하는 ViewModel 내부에 함수가 있습니다. 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)}"> 

또는 그것이 가장 좋은 방법은 내 뷰 모델 만 POJO를보기로 이동하고 EventBus 또는 수신에서 호출하고이하는 것? ViewModel 안에 넣어 절대적으로 완벽

답변

7

대답 당신의 목표는 무엇입니까?

MVVM을 사용하여 ViewModel을 단위 테스트 할 수 있도록 우려를 분리하려면 Viewmodel과 별도의 컨텍스트가 필요한 모든 항목을 유지해야합니다. Viewmodel에는 앱의 핵심 비즈니스 로직이 포함되어 있으며 외부 종속성이 없어야합니다.

그러나 나는 당신이 가고있는 곳을 좋아한다. 어떤 활동이 열렸는지 결정이 View에 있다면, JUnit 테스트를 작성하는 것은 매우 어렵다. 그러나 startActivity() 호출을 수행하는 객체를 viewmodel에 전달할 수 있습니다. 이제 단위 테스트에서이 객체를 모의하고 올바른 활동이 열려 있는지 확인할 수 있습니다.

+0

"Viewmodel에는 앱의 핵심 비즈니스 로직이 포함되어 있으므로 외부 종속성이 없어야합니다." 나는 항상 외부 의존성을 가질 것이라고 생각한다. 내가 데이터 바인딩없이 ViewModel을 사용하여 지점을 볼 수 없어 그것은 안드로이드 특정, 그냥 예를 확인하십시오 가져 오기 : "import android.databinding.ObservableBoolean;" – LLL