0

Ich benutze Xamarin mit MvvmCross, und habe ein Problem mit der Verwendung von Fragmenten.MvvmCross Fragmente lösen

Ich nenne ShowViewModel so:

public class MainViewModel : MvxViewModel 
{ 
    public override void Start() 
    { 
     ShowViewModel<MainMenuViewModel>(); 
    } 
} 

Wo MainMenuViewModel es Klasse ist:

public class MainMenuViewModel : MvxViewModel 
{ 
} 

Implementiert Fragment wie folgt:

[MvxFragment(typeof(MainMenuViewModel), Resource.Id.navigation_frame)] 
[Register("mvvm.droid.views.MainMenuView")] 
public class MainMenuView : MvxFragment<MainMenuViewModel> 
{ 
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     var ignore = base.OnCreateView(inflater, container, savedInstanceState); 
     return this.BindingInflate(Resource.Layout.MainMenuView, null); 
    } 
} 

Aber auf Runtime löst es Fehler:

Android.Content.ActivityNotFoundException: Unable to find explicit activity class {Mvvm.Droid/md5f67dcc55ddb5809d2766dd0c42c8b3bb.MainMenuView}; have you declared this activity in your AndroidManifest.xml?

Um dies herauszufinden, habe ich CustomPresenter implementiert, aus here entnommen.

Und im Setup-Programm registriert diese Moderator für Fragmente:

protected override IMvxAndroidViewPresenter CreateViewPresenter() 
{ 
    var mvxFragmentsPresenter = new MvxCustomFragmentsPresenter(AndroidViewAssemblies); 
    Mvx.RegisterSingleton<IMvxAndroidViewPresenter>(mvxFragmentsPresenter); 
    return mvxFragmentsPresenter; 
} 

Es scheint, als Moderator Fragmente gefunden, aber bei Show (Intent) -Methode aufrufen, es noch vernichtende. In dekompilierten Quellen gibt es eine seltsame Überprüfung, ob es sich um eine Aktivität handelt. Versucht, DrawerLayout basierend auf vielen Implementierungen zu implementieren, aber das gleiche Ergebnis. Was ich vermisse?

Antwort

4

Das Problem ist in Ihrem MvxFragment Attribute:

[MvxFragment(typeof(MainMenuViewModel), Resource.Id.navigation_frame)]

Der erste Parameter muss die MvxViewModel auf Ihre Aktivität in Verbindung gebracht werden, die Sie in das Menü Fragment platzieren mögen In Ihrem Fall glaube ich, diese MainViewModel sein können. ?

Mvvmcross description von MvxFragment Attribut:

public MvxFragmentAttribute(
    Type parentActivityViewModelType, 
    int fragmentContentId, 
    bool addToBackStack = false); 
+0

Vielen Dank! Ich verbrachte Stunden damit, das Problem herauszufinden. – Fragment