Sto scrivendo un'app multipiattaforma per iOS e Android utilizzando MvvmCross.Gestione corretta delle modifiche di configurazione
La versione Android utilizza frammenti nidificati. Ad esempio, la vista home è un cassetto di navigazione, le sue varie visualizzazioni di hub di navigazione sono frammenti che possono essere viste divise contenenti altri frammenti e, in aggiunta, ciascuna vista può mostrare anche un frammento di finestra di dialogo.
Inoltre, non tutti i ViewModels vengono visualizzati tramite ShowViewModel(), alcuni di essi vengono utilizzati più come provider di eventi PropertyChanged come dimostrato nello N=32 video.
Questo funziona correttamente fino a quando non si verifica una modifica della configurazione (in genere, la rotazione del dispositivo). Quando le viste frammento vengono ricreate, i loro modelli di vista non sono e sono impostati su null. Questo è suggerito nel seguente MvvmCross issue #636, dove Stuart menziona anche che vorrebbe che il progetto fornisse alcuni consigli sulle migliori pratiche.
La mia domanda ora è quali sono le migliori pratiche per questo? Che cosa fai se devi supportare correttamente le modifiche alla configurazione di Android in MvvmCross?
Ho provato a risolvere il problema come descritto nel problema collegato sopra, ad esempio da qualche forma di registro ViewModel nel ViewModels padre, e anche provando a serializzare il Frammento ViewModel quando si salva il suo stato di istanza, con successo limitato . I risultati si sono rivelati migliori al massimo. Il problema rimane che un frammento non sa come ricreare il suo modello di vista in MvvmCross. Oh, e la disabilitazione delle modifiche alla configurazione sulla rotazione del dispositivo non conta come risposta. ;-)