首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么FragmentManager的getBackStackEntryCount()返回零?

为什么FragmentManager的getBackStackEntryCount()返回零?
EN

Stack Overflow用户
提问于 2012-12-20 10:29:41
回答 5查看 19.5K关注 0票数 13
代码语言:javascript
复制
private static void changeFragment(Fragment f, boolean init) {
        FragmentTransaction ft = fm.beginTransaction();
        ft.replace(R.id.info_content, f,f.getClass().getName());
        if(!init){
            ft.addToBackStack(null);
        }
        ft.commit();
    }

当我想通过调用fm.getBackStackEntryCount()获得堆栈cout时,它返回零?

EN

回答 5

Stack Overflow用户

发布于 2013-01-16 00:45:07

您必须在ft.commit()之后或fm.getBackStackEntryCount()之前调用fm.executePendingTransactions()。因为commit()只为以后的传递调度事务。

票数 29
EN

Stack Overflow用户

发布于 2015-08-17 16:23:00

我也遇到过类似的问题,在我的例子中,getFragmentManager().getBackStackEntryCount()总是返回零。

我的问题是我使用了支持片段:

代码语言:javascript
复制
Fragment fragment = new MyFragment();
// note getSupportFragmentManager() instead getFragmentManager()
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame, fragment)
.addToBackStack(null)
.commit();

fragmentManager.executePendingTransactions();

我检查了getFragmentManager() backStackEntryCount,它总是返回0(它使用了另一个片段管理器):

代码语言:javascript
复制
@Override
public void onBackPressed() {
    if (getFragmentManager().getBackStackEntryCount() > 0 ) {
        getFragmentManager().popBackStack();            
    }
}

而不是返回正确数字的getSupportFragmentManager:

代码语言:javascript
复制
@Override
public void onBackPressed() {
    if (getSupportFragmentManager().getBackStackEntryCount() > 0 ) {
        getSupportFragmentManager().popBackStack();         
    }
}

希望它能帮上忙!

票数 19
EN

Stack Overflow用户

发布于 2015-05-17 18:55:43

现在回答这个问题可能已经太晚了。无论如何,我希望这个答案会对某些人有所帮助。

这主要取决于您实际调用getBackStackEntryCount()方法的位置。在我的例子中,我是在调用super.onBackPressed()之后调用这个方法的。在调用此方法的那一刻,后台堆栈中没有任何片段。这就是为什么我总是收到0。

在onBackPressed()中调用方法的正确方式:

代码语言:javascript
复制
   @Override
public void onBackPressed() {
    try {
        int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount();
        Log.d("class", "items in backstack " + backStackEntryCount);
    } catch (Exception e) {
        e.printStackTrace();
    }
    super.onBackPressed();
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13964409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档