6

に私の簡単なレイアウトは断片のみプレースホルダを持っている理由:ゼロフラグメントはbackstack

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

しかし、私はバックスタックのフラグメントで終わるのですか?

+1

...それがお役に立てば幸いですか! – Selvin

+0

@Selvin、はい、私はトランザクションをコミットしました、私のポストで私の更新されたコードを見てください。 –

+0

私もこれを見ています。あなたはそれを解決することができましたか? – span

答えて

0

私は答えが不明です...フラグメントが追加されるのを待つ必要がありますか? それが起こるコミットすることを確実にするためにログインする前に、この

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

おかげでたくさん!これは私のためだった –

+0

あなたはこのタイプの変更を聞くためにタイマーを使用すべきではありません...もしトランザクションが50ミリ秒より長くかかったら? –

+0

@ tf.alves私はそれが汚れた解決法だと知っていますが、それは私のために働く。もっと良い提案がありますか? – dooplaye

3

てみexecutePendingTransactions()でカウント取得してください。このよう :

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

は、トランザクションをコミットしなかった

関連する問題