2016-03-20 138 views
5

我有一個活動,它承載了框架佈局中的片段。如果我將顯示的片段更改爲另一片段,則片段不會添加到後備堆棧,因此使用「後退」按鈕將直接關閉應用程序而不是導航回(FragmentManager.BackStackEntryCount在OnBackPressed中始終爲0 ()-回電話)。如何添加一個片段到MvvmCross 4.0中的後臺堆棧?

在承載片段「MainActivity」的視圖模型我經由ShowViewModel顯示片段<> -method:

public class MainViewModel : MvxViewModel 
{ 
    public IMvxCommand ShowHomeCommand 
    { 
     get { return new MvxCommand(ShowHomeExecuted); } 
    } 

    private void ShowHomeExecuted() 
    { 
     ShowViewModel<HomeViewModel>(); 
    } 
} 

片段級具有註解的視圖模型分配給一個宿主活動:

[MvxFragment(typeof(MainViewModel), Resource.Id.fragment_container)] 
[Register("namespace.of.HomeFragment")] 

我使用默認AndroidViewPresenter在我的設置類:

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

我期望在MvxFragment-Attribut或MvxFragment-class中有一個參數「AddToBackstack」或類似的東西,但是沒有這樣的東西。我錯過了什麼,或者目前是否在MvvmCross 4.0的新片段機制中不支持後備堆棧?

回答

5

你可以做的是添加這樣的事情你MainActivity

public override void OnBeforeFragmentChanging (IMvxCachedFragmentInfo fragmentInfo, Android.Support.V4.App.FragmentTransaction transaction) 
     { 
      var currentFrag = SupportFragmentManager.FindFragmentById (Resource.Id.content_frame) as MvxFragment; 

      if(currentFrag != null 
       && fragmentInfo.ViewModelType != typeof(MenuViewModel) 
       && currentFrag.FindAssociatedViewModelType() != fragmentInfo.ViewModelType) 
       fragmentInfo.AddToBackStack = true; 
      base.OnBeforeFragmentChanging (fragmentInfo, transaction); 
     } 

導航發生前這將片段添加到堆棧中。

0

我認爲這是改變你的片段的屬性

[MvxFragment(typeof(MainViewModel), Resource.Id.fragment_container, AddToBackStack = true)] 
[Register("namespace.of.HomeFragment")] 

這v4.2.3

當然可以作爲簡單
相關問題