簡體   English   中英

當我在Actvity中按返回按鈕時,不會更改片段后堆棧的大小

[英]Doesn't change fragment backstack size when I press back button in 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();
    }
}

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

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

更新:

添加您的行updateToolbar(); 下面在if語句中彈出調用。

答案與Sarthak的答案相似,但是不必打電話:

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

調用您的片段管理器的實例,即fragmentManager

像這樣:

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

更新:

最好創建一個FragmentManager字段,在活動的onCreate中對其進行初始化,然后在所有片段事務中使用該字段,並添加到堆棧中,依此類推。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM