2017-05-05 4 views
-1

XamarinとMVVMCrossフレームワークを使用してAndroidで作業しています。私はバック・スタックを相互参照する画面間を移動しなければならないので、バック・ボタンを処理するためにフラグメント・マネージャからフラグメントを削除したいのです。だから私はスタックから繰り返しエントリを削除したい。スタックからの反復エントリを削除しますが、最新のフラグメントでBackStackEntryCountを更新しません。私は、コードXamarin Androidのフラグメントマネージャから反復フラグメントを削除します。

public override void OnFragmentChanged(IMvxCachedFragmentInfo fragmentInfo) 
    { 
     if (fragmentInfo != null) 
     { 
      var ifExists = 
       SupportFragmentManager.Fragments?.FirstOrDefault(x => x.Tag.ToLower() == fragmentInfo.Tag.ToLower()); 

      if (ifExists != null) 
      { 
       var indexOf = SupportFragmentManager.Fragments.IndexOf(ifExists); 
       var total = SupportFragmentManager.BackStackEntryCount; 
       for (int i = indexOf + 1; i < total; i++) 
       { 
        SupportFragmentManager.Fragments.RemoveAt(i); 
       } 
      } 
     } 

     base.OnFragmentChanged(fragmentInfo); 
    } 

答えて

0

SupportFragmentManager.Fragmentsを書かれている

は、(それが唯一のgetを持っている)、読み取り専用プロパティです。フラグメントリストの内容を変更しても、アンダーラインフラグメントのバックスタックカウントには影響しません。

代わりに、既存のフラグメントにスタックをポップすることができます。これにより、その上にあるすべてのフラグメントが削除されます。

var exisitngFragment = SupportFragmentManager.FindFragmentByTag(fragmentInfo.Tag); 
SupportFragmentManager.PopBackStackImmediate(exisitngFragment.Id, 0); 
関連する問題