片段管理器的`getBackStackEntryCount`方法返回零

时间:2017-08-07 17:54:42

标签: android

为什么我的片段管理器的getBackStackEntryCount方法返回零?

我花了一个小时或检查SO来回答这个问题。我已经

  1. 使用片段支持管理器getSupportFragmentManager
  2. 名为executePendingTransactions
  3. 导入android.support.v4.app.Fragment
  4. getBackStackEntryCount一直返回零。

    知道为什么吗?我的代码看起来不正确吗?

    这是我的代码

    private void injectFragment(){
    
        // Get the fragment 
        StepsFragment stepsFragment = new StepsFragment();
    
        // Get the support fragment manager
        FragmentManager fragmentManager = getSupportFragmentManager();
    
        // Inject the fragment into a frame layout
        fragmentManager.beginTransaction()
                .replace(R.id.frame_layout, stepsFragment)
                .commit();
    
        // I read that I should execute pending transactions before calling
        // getBackStackEntryCount
        fragmentManager.executePendingTransactions();
    
        // This log prints `getBackStackEntryCount returns 0`
        int entryCount = fragmentManager.getBackStackEntryCount();
        Log.v(TAG,"getBackStackEntryCount returns "+String.valueOf(entryCount));
    }
    

1 个答案:

答案 0 :(得分:2)

getBackStackEntryCount()为0,因为您尚未向FragmentManager后台堆栈添加任何片段事务。

请注意,每个FragmentManager都有自己的backstack(因此Fragment的子FragmentManager堆栈与包含Activity的片段backstack不同,它也与应用程序的活动后备栈不同。

如果您要将事务添加到后台,那么它将返回1:

fragmentManager.beginTransaction()
        .replace(R.id.frame_layout, stepsFragment)
        .addToBackStack(null)
        .commit();