2015-05-19 4 views
12

У меня есть некоторые сомнения относительно состояния сохранения с помощью MVP на Android. Я определил свои фрагменты/действия как виды, а затем представил соответствующих докладчиков.MVP Android - Где сохранить состояние просмотра?

Мой пример прост:

У меня есть деятельность с некоторыми флажками и блесен. Если активность разрушена системой Android, а затем воссоздана, где я должен сохранять состояния этих счетчиков и флажков? На вид? На докладчике?

Если на вид, должен ли я иметь логику восстановления на представлении или на презентаторе?

Спасибо!

ответ

2

В случае MVP есть модель , которая отвечает за сохранение состояния зрения.

Например, у вас модель у вас есть Post объект с массивом Категории. На ваш взгляд у вас есть флажок для каждой категории, и в каждом проверке/непроверенном действии вы добавляете/удаляете объекты из массива в столбце.

После активности восстанавливается, View должны проситьКатегории массива сообщения для того, чтобы выяснить, какие выбраны и которые не является, так что он может правильно установить проверено/непроверенный атрибут.

Вот очень хороший пост об этом: http://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/

+0

Я понимаю, но мой пример - это форма творения. Поэтому моя модель может быть Post с категориями. Проблема в том, что я никогда не сохраняю объект post. Целью является создание объекта post и его использование для создания веб-запроса. Поэтому, я думаю, единственный способ, которым я это делаю, - сохранить в представлении, а затем воссоздать состояние представления. Я ошибаюсь? @mmark –

+1

@ FábioCarballo, если я не ошибаюсь в цели MVP, вам не нужно будет сохранять объект Post («save», я предполагаю, что вы имеете в виду что-то вроде локального db или SharedPreferences). Ведущий + модель - это тот, кто должен сохраняться (в памяти) через изменения состояния представления – mmark

0

Презентатор является интерфейсом между моделью и видом и не несет никакой ответственности за сохранение любого государства. Имеет смысл разрешить состояние модели или представления:

  1. Модель. Presenter отвечает за заполнение данных View with Model во время инициализации активности и совершает все Просмотрите взаимодействия с моделью сразу. Модель всегда обновляется, поэтому изменения конфигурации не имеют значения.
  2. Вид. Presenter отвечает за заполнение данных View with Model во время инициализации, однако View сохраняет и восстанавливает собственное состояние при изменении конфигурации. Это имеет смысл в ситуации создания/редактирования, когда существует кнопка «Сохранить», и у вас есть временная модель (или рабочая модель).

Последний подход имеет смысл, когда существует кнопка «Сохранить». Ведущий не участвует в любом случае.

0

1. Сохранить & Восстановить Просмотреть состояние в поле зрения (активность/фрагмент).

Я предпочитаю сохранение & восстановления состояния просмотра в View сам (Activity/Фрагмент)

Поэтому ответственность зрения сохранения состояния (Поэтому придерживаться единого принципа ответственности).

Пример

/** 
* 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. Сохранить & Восстановление Presenter государства в Presenter

Если вам нужно сохранить любое состояние ведущего затем сделать это в ведущий.

Моя база ведущий будет выглядеть этот

/** 
* 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(); 
Смежные вопросы