2017-05-05 74 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);