2016-10-07 32 views
0

按後退按鈕這是我的代碼:不改變片段堆棧中的大小,當我在Actvity

FragmentManager fragmentManager = getSupportFragmentManager(); 
try { 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     fragmentTransaction.replace(R.id.container, fragment);   
     fragmentTransaction.addToBackStack(null);    
     fragmentTransaction.commitAllowingStateLoss();    
} catch (Exception e) { 
    e.printStackTrace(); 
} 

當我加入了第一個片段,我的方法getSupportFragmentManager().getBackStackEntryCount()返回0

當我加入第二個片段getBackStackEntryCount()返回1,但是當我按下後按鈕getBackStackEntryCount()仍然返回1.

爲什麼?

UPD -

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    updateToolbar(); // here I check backstackCount and update Toolbar 
} 

UPD2 -

private void updateToolbar() {    
    if (getSupportFragmentManager().getBackStackEntryCount()() > 0) { 
     showBackButtonOnToolBar(); 
    } else { 
     showProfileButtonOnToolBar(); 
    } 
} 
+0

你可以發佈你的'onBackPressed'方法嗎? –

+0

你爲什麼使用'commitAllowingStateLoss'? –

+0

@AlexKlimashevsky完成 – Artem

回答

1

你將不得不調用popBackStack()onBackPressed()

@Override 
public void onBackPressed() 
{ 
    if (getSupportFragmentManager().getBackStackEntryCount() > 0) 
    { 
     getSupportFragmentManager().popBackStack();   
    } 
    else 
    { 
     super.onBackPressed(); 
    } 
} 

更新:

添加你的線updateToolbar();下面的彈出呼叫內部if語句。

+0

doesn' 。對我來說將不起作用在super.onBackPressed()的代碼如您 – Artem

+0

如果{ super.onBackPressed();} (mFragments.getSupportFragmentManager()popBackStackImmediate(!)。) – Artem

1

答案是的但不是調用類似Sarthak的,:

if (getSupportFragmentManager().getBackStackEntryCount() > 0) { 
    getSupportFragmentManager().popBackStack();   
} 
else { 
    super.onBackPressed(); 
} 

打電話給你的片段經理即fragmentManager

像這樣的實例:

if (fragmentManager.getBackStackEntryCount() > 0) { 
    fagmentManager.popBackStack();   
} 
else { 
    super.onBackPressed(); 
} 

UPDATE:

可能最好創建一個FragmentManager字段,在您的活動的onCreate中初始化該字段,然後在所有片段事務中使用該字段,添加到回棧中等等。

+0

不適合我((工作( – Artem

+0

有你試過popBackStackImmediate()? – MichaelStoddart