2016-11-07 16 views
8

Tôi đang xây dựng một Ứng dụng Android bằng MVVM và DataBinding. Và tôi có một chức năng bên trong ViewModel của tôi bắt đầu Hoạt động. Bạn có thể thực hiện cuộc gọi onClick bên trong ViewModel không?Thực tiễn tốt nhất cho Android MVVM startActivity

Như thế này.

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); 
    } 
} 

Và trong XML của tôi:

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

Hoặc nó sẽ là một thực hành tốt nhất để di chuyển nó vào Xem và gọi nó là từ EventBus hoặc Rx và chỉ có POJO trong ViewModel của tôi?

Trả lời

7

Câu trả lời cho câu hỏi của bạn là mục tiêu của bạn là gì?

Nếu bạn muốn sử dụng MVVM để tách mối quan tâm để bạn có thể kiểm tra đơn vị ViewModel của bạn thì bạn nên cố gắng giữ mọi thứ yêu cầu một bối cảnh riêng biệt với ViewModel của bạn. ViewModel chứa logic nghiệp vụ cốt lõi của ứng dụng của bạn và không có phụ thuộc bên ngoài.

Tuy nhiên tôi thích nơi bạn đang đi :) Nếu quyết định mà Hoạt động được mở nằm trong Chế độ xem, thì rất khó để viết bài kiểm tra JUnit cho nó. Tuy nhiên bạn có thể truyền một đối tượng vào viewmodel thực hiện lệnh startActivity(). Bây giờ trong bài kiểm tra Đơn vị của bạn, bạn có thể chỉ cần thử đối tượng này và xác minh rằng Hoạt động chính xác được mở

+0

"Chế độ xem có chứa logic nghiệp vụ cốt lõi của ứng dụng của bạn và không có phụ thuộc bên ngoài." - Tôi nghĩ rằng nó sẽ luôn luôn có phụ thuộc bên ngoài. Tôi không thấy một điểm trong việc sử dụng ViewModel mà không cần databinding và nó là android cụ thể, chỉ cần kiểm tra nhập khẩu ví dụ: "import android.databinding.ObservableBoolean;" – LLL

Các vấn đề liên quan