2015-05-19 39 views
12

Tôi đang có một số nghi ngờ về trạng thái tiết kiệm sử dụng MVP trên Android. Tôi đã xác định các mảnh/hoạt động của mình dưới dạng lượt xem và sau đó triển khai các diễn giả tương ứng.MVP Android - Nơi lưu trạng thái xem?

Ví dụ của tôi rất đơn giản:

Tôi có hoạt động với một số hộp kiểm và người quay. Nếu hoạt động bị phá hủy bởi hệ thống Android và sau đó được tạo lại, tôi nên lưu các trạng thái và trạng thái hộp kiểm này ở đâu? Trên quan điểm? Trên người trình bày?

Nếu ở chế độ xem, tôi có nên có logic khôi phục trên chế độ xem hoặc trên người trình bày không?

Cảm ơn bạn!

Trả lời

2

Trong trường hợp MVP, là mô hình người chịu trách nhiệm giữ trạng thái của chế độ xem.

Ví dụ: trong mô hình của bạn, bạn có một đối tượng Đăng với một mảng Danh mục. Trong chế độ xem của bạn, bạn có Hộp kiểm cho từng danh mục và trong mỗi hành động được chọn/bỏ chọn, bạn thêm/xóa đối tượng khỏi mảng Danh mục của Bài đăng.

Khi Hoạt động được khôi phục, các Xem nên yêu cầuThể loại mảng Post để tìm ra được lựa chọn và không, vì vậy nó có thể thiết lập kiểm tra/thuộc tính không được kiểm soát thích hợp.

Dưới đây là một bài thực sự tốt về nó: http://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/

+0

Tôi hiểu, nhưng ví dụ của tôi là một hình thức sáng tạo. Vì vậy, mô hình của tôi có thể là Bài đăng có Danh mục. Vấn đề là tôi không bao giờ lưu đối tượng bài viết. Mục tiêu là tạo một đối tượng bài đăng và sử dụng nó để tạo một yêu cầu web. Vì vậy, tôi đoán cách duy nhất tôi làm là lưu trữ trong chế độ xem và sau đó tạo lại trạng thái của chế độ xem. Liệu tôi có sai? @mmark –

+1

@ FábioCarballo nếu tôi không hiểu sai mục tiêu của MVP, bạn sẽ không cần phải lưu đối tượng Bài đăng (bằng cách "lưu" tôi giả sử bạn có ý nghĩa giống như một db cục bộ hoặc SharedPreferences). Người trình bày + mô hình là người nên duy trì (trong bộ nhớ) trên các thay đổi trạng thái xem – mmark

0

Các Presenter là một giao diện giữa Model và View và không nên dùng bất kỳ trách nhiệm giải cứu bất cứ tiểu bang. Điều này có ý nghĩa hơn khi cho phép Chế độ xem mô hình hoặc Chế độ xem:

  1. Mô hình. Người trình bày chịu trách nhiệm điền dữ liệu Chế độ xem với Mô hình trong khi khởi tạo hoạt động và cam kết tất cả Xem các tương tác với Mô hình ngay lập tức. Mô hình luôn được cập nhật, vì vậy thay đổi cấu hình không liên quan.
  2. Chế độ xem. Người trình bày chịu trách nhiệm điền dữ liệu Chế độ xem với Mô hình trong khi khởi tạo, tuy nhiên Chế độ xem lưu và khôi phục trạng thái riêng của nó qua các thay đổi cấu hình. Điều này có ý nghĩa trong một tình huống tạo/chỉnh sửa trong đó nút 'Lưu' tồn tại và bạn có Mô hình tạm thời (hoặc Mô hình làm việc).

Cách tiếp cận thứ hai có ý nghĩa khi nút 'Lưu' tồn tại. Người thuyết trình không liên quan theo cách nào cả.

0

1. Lưu & Khôi phục Chế độ xem trạng thái xem (Hoạt động/phân đoạn).

Tôi thích tiết kiệm & khôi phục lại trạng thái xem tại Xem bản thân (Hoạt động/Fragment)

Do đó nó là trách nhiệm của xem để tiết kiệm nước (Do đó tuân thủ nguyên tắc trách nhiệm duy nhất).

Ví dụ

/** 
* On Save Instance State. 
* 
* @param outState Out State. 
*/ 
@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putString(STATE_KEY_USERNAME, getUserNameFieldValue()); 
    outState.putString(STATE_KEY_PASSWORD, getPasswordFieldValue()); 
    outState.putBoolean(STATE_KEY_REMEMBER_ME, getRememberMeFieldValue()); 
} 

/** 
* On Restore Instance State. 
* 
* @param savedInstanceState Saved Instance State. 
*/ 
@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    if (savedInstanceState != null) { 
     String userName = savedInstanceState.getString(STATE_KEY_USERNAME, ""); 
     String password = savedInstanceState.getString(STATE_KEY_PASSWORD, ""); 
     boolean rememberMe = savedInstanceState.getBoolean(STATE_KEY_REMEMBER_ME, false); 

     userNameEditText.setText(userName); 
     passwordEditText.setText(password); 
     rememberMeCheckBox.setChecked(rememberMe); 
    } 
} 

2. Lưu & Restore Presenter Nhà nước Presenter

Nếu bạn cần phải lưu bất cứ tiểu bang của người dẫn chương trình sau đó làm điều đó trong người dẫn chương trình.

người dẫn chương trình cơ sở của tôi sẽ xem xét này

/** 
* On Create View. 
* <p> 
* 1. Gets called from view's onCreate method. 
* 
* @param view   View. 
* @param savedInstanceState Saved Instance State. 
*/ 
void onCreateView(final View view, final Bundle savedInstanceState); 

/** 
* On Attach View. 
* <p> 
* 1. Gets called from view's onStart method. 
*/ 
void onAttachView(); 

/** 
* On Detach View. 
* <p> 
* 1. Gets called from view's onStop method. 
*/ 
void onDetachView(); 

/** 
* On Save State. 
* <p> 
* 1. Gets called before view is destroyed to save the state of the presenter. 
* 
* @param outState Bundle in which to place your saved state. 
*/ 
void onSaveState(final Bundle outState); 

/** 
* On Destroy View. 
* <p> 
* 1. Gets called from view's onDestroy method. 
*/ 
void onDestroyView(); 
Các vấn đề liên quan