6

我簡單佈局只有一個片段佔位符:爲什麼在堆棧中零片段

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

我首先是1片段添加到這個佔位符:

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()+""); 

但我最終與片段在回棧,爲什麼?

+1

你提交的事務? – Selvin 2012-04-20 14:00:55

+0

@Selvin,是的,我已經提交了交易,請在我的帖子中查看我更新的代碼。 – 2012-04-20 14:05:03

+0

我也看到這個。你設法解決它嗎? – span 2012-08-03 13:30:28

回答

0

我不知道在回答...可能需要等待片段被添加? 嘗試獲得由日誌在此之前

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

非常感謝!這對我來說是 – 2015-03-14 00:01:26

+0

你不應該使用計時器來聽這種類型的變化......如果事務處理時間超過50ms會怎樣? – 2015-08-31 13:36:05

+0

@ tf.alves我知道這是骯髒的解決方案,但它適用於我。可能你有更好的建議? – dooplaye 2015-10-10 18:41:12

3

嘗試executePendingTransactions()計算,以確保提交它發生。 像這樣:

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

希望它可以幫助...