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