为什么回退栈中存在零片段

7

我的简单布局只有一个片段占位符:

<FrameLayout
   android:id="@+id/fragment_placeholder"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
  />

我先向这个占位符添加一个第一片段
fragmentTransaction.add(R.id.fragment_placeholder, firstFragment, "first"); //I did not put to backstack

我有一个第二个片段,它替换了上面的片段,并将其加入到后退栈中:

FragmentManager fragMgr = getSupportFragmentManager();
FragmentTransaction fragTrans = fragMgr.beginTransaction();

//initialize an fragment instance
Fragment secondFragment = initSecondFragment(); 

//replace with the fragment 
fragTrans.replace(R.id.fragment_placeholder, secondFragment, "second");

//Add transaction to back stack
fragTrans.addToBackStack(null);

//commit the transaction
fragTrans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
fragTrans.commit();  

//The following log returns me 0 when counting the number of fragments in back stack, why?  
Log.v("nr of fragment in back stack", fragMgr.getBackStackEntryCount()+"");

但是我在返回栈中最终得到了0个片段,为什么???


@Selvin,是的,我已经提交了事务,请查看我在帖子中更新的代码。 - Leem.fin
我也遇到了这个问题。你解决了吗? - span
1
试一下这个链接:https://dev59.com/UWYr5IYBdhLWcg3wFGZS - Philipe Steiff
3个回答

4
尝试在日志前执行executePendingTransactions(),以确保提交的发生。像这样:

fragMgr.executePendingTransactions();
Log.v("nr of fragment in back stack", fragMgr.getBackStackEntryCount()+"");

希望这有所帮助...

0

我不确定该怎么回答...也许需要等待该片段被添加?试着用这个来获取计数

 new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                Log.v("nr of fragment in back stack", fragMgr.getBackStackEntryCount()+"");  
            }
        },50);

你不应该使用计时器来监听这种类型的变化... 如果事务花费的时间超过50毫秒怎么办? - tf.alves
@tf.alves 我知道这是一个不太优雅的解决方案,但它对我很有效。也许你有更好的建议? - dooplaye
@dooplaye,很抱歉,但是通常情况下,您不应该依赖于具有随机间隔的计时器。关于手头的问题,我认为错误的片段管理器可能是原因,也许他应该处理子片段管理器。 - tf.alves

0
尝试这个作为第一个片段
fragmentTransaction.addToBackStack(null).add(R.id.fragment_placeholder, firstFragment, "first"); 

这是第二个片段

fragmentTransaction.addToBackStack(null).replace(R.id.fragment_placeholder, secondFragment, "second");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接