0

J'ai un problème après la mise à jour vers le nouveau MvvmCross 5.2.Après la mise à jour de MvvmCross 5.2 J'ai une erreur Fragment déjà actif

J'ai forcé désinstallé MvvmCross.Droid.Shared et après la mise à jour tous les paquets. J'ai ensuite eu quelques erreurs avec MvxFragment, donc je l'ai remplacé par MvxFragmentPresentation. En outre, j'ai remplacé MvxCachingFragmentCompatActivity par MvxAppCompatActivity et j'utilise maintenant le nouveau MvxAppCompatViewPresenter. Tout fonctionne bien, et l'application fonctionne bien. Sauf après que je sélectionne la déconnexion dans le menu, je suis pris à la LoginViewModel et quand je veux me connecter à nouveau, je reçois cette erreur

Fragment déjà actif.

Quelqu'un peut-il m'aider? Mon projet de test est HERE sur github.

échouer ici, par le ShowViewModel

public class MainViewModel : BaseViewModel 
    { 
     public void ShowMenu() 
     { 
      ShowViewModel<MenuViewModel>(); 
     } 
    } 

Répondre

0

Le problème est que vous mixez vos méthodes de présentation en MvvmCross. Avec MvvmCross 5.x une nouvelle façon préférée de naviguer a été introduite en utilisant le IMvxNavigationService. Pour les nouvelles applications, il est suggéré de faire plutôt usage du IMvxNavigationService par rapport au précédent ShowViewModel. Il est conseillé de ne pas mélanger l'utilisation des deux façons de naviguer, car vous pourriez avoir un comportement étrange.

Passer à IMvxNavigationService que vous utilisez déjà sur le LoginViewModel résoudra l'exception que vous obtenez.

protected readonly IMvxNavigationService _mvxNavigationService; 

public MainViewModel(IMvxNavigationService mvxNavigationService) 
{ 
    _mvxNavigationService = mvxNavigationService; 
} 

public void ShowMenu() 
{ 
    _mvxNavigationService.Navigate<MenuViewModel>(); 
} 

De plus, vous souhaitez supprimer l'ajout HomeFragment au backstack pour éviter de voir une page blanche lorsque la navigation arrière.

[MvxFragmentPresentation(typeof(MainViewModel), Resource.Id.content_frame)] 
public class HomeFragment : BaseFragment<HomeViewModel> 

Voir pull request pour plus de détails sur les modifications.


Notes complémentaires

plutôt que de spécifier explicitement MvxAppCompatViewPresenter dans votre Setup héritant MvxAndroidSetup vous pouvez plutôt hériter de MvxAppCompatSetup qui fera automatiquement l'utilisation du MvxAppCompatViewPresenter ainsi que le registre AndroidViewAssemblies supplémentaires relatives à l'appui des bibliothèques (voir le lien à quels assemblages) et FillTargetFactories pour le MvxAppCompatSetupHelper.

+0

ye ça marche ... merci – pnk