2017-08-24 67 views
2

所以我有一個片段沒有顯示在MvxCachingFragmentCompatActivity內部的問題。Mvvmcross:framelayout在活動後不顯示片段

我用它來找到問題的模式如下:

  1. 註冊一個活動。
  2. 導航到擴展MvxCachingFragmentCompatActivity
  3. 負載使用await _navigationService.Navigate<[TheFragmentViewModel]>();
  4. 片段裝載的片段另一個活動的調用,但它並沒有顯示任何東西。

片段聲明:

[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; 
    } 
} 

主要活動:(沒有什麼特別的,我認爲)

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

麥Ñ視圖模型

public class MainViewModel : MvxViewModel 
{ 
    private readonly IMvxNavigationService _navigationService; 

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

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

主要業務佈局:(非常簡單的佈局)

<?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> 

我還添加在github樣品:Github link

我還加了a bug report on the Mvvmcross github,但我不確定這是我的一部分還是他們的錯誤?

回答

2

您不應該使用async void或從非異步命令啓動異步任務。這是第一個問題。此外,您的Initialize不會被調用,因爲您沒有使用RegisterNavigationServiceAppStart<>()。另一件事是,你應該直接導航到一個片段,而不是首先到達活動,因爲MvvmCross將處理該活動。

另一個提示是使用依賴注入來解決IMvxNavigationService

+0

我開始對所有事情都沒有足夠的理解,對於你的人來說,我仍然在學習一點:) – kevingoos