2017-08-24 2 views
2

Also habe ich ein Problem mit einem Fragment nicht innerhalb einer MvxCachingFragmentCompatActivity zeigt.Mvvmcross: Framelayout zeigt kein Fragment nach Aktivität

Das Muster, das ich für das Problem zu erhalten, verwenden ist wie folgt:

  1. eine Aktivität registrieren.
  2. Navigieren Sie zu einer anderen Aktivität, die MvxCachingFragmentCompatActivity
  3. Legen Sie das Fragment mit await _navigationService.Navigate<[TheFragmentViewModel]>();
  4. Fragment Laden genannt wird, erstreckt sich aber es zeigt nichts.

Fragment Erklärung:

[MvxFragment(typeof(MainViewModel), Resource.Id.content_frame, true)] 
[Register(nameof(FirstFragment))] 
public class FirstFragment : MvxFragment<FirstViewModel> 
{ 
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     base.OnCreateView(inflater, container, savedInstanceState); 
     var view = this.BindingInflate(Resource.Layout.FirstView, container, false); 
     return view; 
    } 
} 

Haupttätigkeit: (nichts Besonderes glaube ich)

[Activity(Label = "Fragment View")] 
public class MainActivity : MvxCachingFragmentCompatActivity<MainViewModel> 
{ 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 
     SetContentView(Resource.Layout.MainView); 
    } 
} 

Mai n Ansichtsmodell

public class MainViewModel : MvxViewModel 
{ 
    private readonly IMvxNavigationService _navigationService; 

    public MainViewModel(IMvxNavigationService navigationService) 
    { 
     _navigationService = navigationService; 
     Init(); 
    } 

    public async void Init() 
    { 
     await _navigationService.Navigate<FirstViewModel>(); 
    } 
} 

Haupttätigkeit Layout: (sehr einfaches Layout)

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:local="http://schemas.android.com/apk/res-auto" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 
    <FrameLayout 
    android:id="@+id/content_frame" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 
</LinearLayout> 

ich auch eine Probe auf Github hinzugefügt: Github link.

Ich habe auch a bug report on the Mvvmcross github hinzugefügt, aber ich bin mir nicht sicher, ob es ein Bug von mir oder ihnen ist?

Antwort

2

Sie sollten niemals async void verwenden oder eine asynchrone Task von einem nicht asynchronen Befehl starten. Dies sind die ersten Probleme. Auch Ihre Initialize wird nicht aufgerufen, weil Sie nicht RegisterNavigationServiceAppStart<>() verwenden. Eine andere Sache ist, dass Sie direkt zu einem Fragment navigieren sollen und nicht zuerst zu der Aktivität, weil MvvmCross das verarbeiten wird.

Ein weiterer Hinweis wird sein, die Abhängigkeitsinjektion zu verwenden, um IMvxNavigationService aufzulösen.

+0

Ich fange an, alles zu untersteuern, thx für Ihren Kenner. Ich lerne immer noch ein bisschen :) – kevingoos

Verwandte Themen