2015-05-19 5 views
12

Ich bin mit einigen Zweifeln bezüglich des Zustands, der MVP auf Android verwendet. Ich habe meine Fragmente/Aktivitäten als Ansichten definiert und dann die entsprechenden Moderatoren implementiert.MVP Android - Wo den Ansichtszustand speichern?

Mein Beispiel ist einfach:

ich eine Aktivität mit einigen Kontrollkästchen und Spinnereien haben. Wenn die Aktivität vom Android-System zerstört und dann neu erstellt wird, wo sollte ich diese Spinner und Checkboxen speichern? Auf der Aussicht? Auf dem Moderator?

Wenn in der Ansicht, sollte ich die Wiederherstellungslogik in der Ansicht oder auf dem Presenter haben?

Vielen Dank!

Antwort

2

Im Fall von MVP, ist das Modell Wer ist verantwortlich für den Zustand der Ansicht zu halten.

Zum Beispiel in Ihnen Modell haben Sie ein Beitrag Unternehmen mit einer Reihe von Kategorien. In Ihrer Ansicht haben Sie eine Checkbox für jede Kategorie, und in jeder aktivierten/deaktivierten Aktion fügen Sie Objekte aus dem Array der Kategorie hinzu.

Sobald die Aktivität wieder hergestellt wird, die Ansicht für die PostKategorie Array, um die ausgewählt werden, um herauszufinden, fragen sollten und welche nicht, so dass es die richtige aktiviert/deaktiviert Attribut festlegen.

Hier ist eine wirklich gute Post darüber: http://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/

+0

Ich verstehe, aber mein Beispiel ist eine Form der Schöpfung. Also mein Model könnte ein Post mit Kategorien sein. Das Problem ist, dass ich das Post-Objekt nie speichern werde. Das Ziel besteht darin, ein Post-Objekt zu erstellen und es für eine Web-Anfrage zu verwenden. Also, ich denke, die einzige Möglichkeit, dies zu tun, ist, in der Ansicht zu speichern und dann den Zustand der Ansicht wiederherzustellen. Liege ich falsch? @ Mmark –

+1

@ FábioCarballo Wenn ich das Ziel von MVP nicht missverstand, müssen Sie das Post-Objekt nicht speichern (mit "Speichern" nehme ich an, Sie meinen etwas wie eine lokale db oder SharedPreferences). Der Moderator + das Modell sind diejenigen, die über die Änderungen des Ansichtszustands (im Speicher) bestehen sollen – mmark

0

Der Presenter ist eine Schnittstelle zwischen dem Modell und der Ansicht und sollten keine Verantwortung übernehmen jeder Staat für die Rettung. Es ist sinnvoller, entweder den Modell- oder den Ansicht-Handle-Status zu setzen:

  • Modell. Presenter ist verantwortlich für das Auffüllen der Ansicht mit Modelldaten während der Aktivitätsinitialisierung und schreibt alle Interaktionen sofort mit dem Modell anzeigen. Das Modell wird immer auf dem neuesten Stand gehalten, so dass Konfigurationsänderungen irrelevant sind.
  • Ansicht. Presenter ist verantwortlich für das Auffüllen der Ansicht mit Modelldaten während der Initialisierung. Die Ansicht speichert jedoch den eigenen Status und stellt ihn bei Konfigurationsänderungen wieder her. Dies ist in einer Erstellungs-/Bearbeitungssituation sinnvoll, in der eine Schaltfläche "Speichern" vorhanden ist und Sie ein Übergangsmodell (oder Arbeitsmodell) haben.
  • Der letztere Ansatz macht Sinn, wenn ein 'Speichern' Knopf existiert. Der Moderator ist in keiner Weise involviert.

    0

    1. Speichern & Status in Ansicht wiederherstellen (Aktivität/Fragment).

    Ich ziehe Spar & in View Ansicht des Zustandes der Wiederherstellung selbst (Aktivität/Fragmente)

    es daher in der Verantwortung der Sicht seinen Zustand zu speichern (also auf einzelne Verantwortung -Prinzip).

    Beispiel

    /** 
    * 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. Speichern & wiederherstellen Presenter Staat in Presenter

    Wenn Sie Zustand des Moderators speichern müssen Sie dann in Präsentator es.

    Mein Basis Moderator sieht diese

    /** 
    * 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();