6

My đơn giản bố trí chỉ có một placeholder đoạn:Tại sao không mảnh trong backstack

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

tôi trước hết là thêm một 1 đoạn để giữ chỗ này:

fragmentTransaction.add(R.id.fragment_placeholder, firstFragment, "first"); //I did not put to backstack 

Tôi có một 2 đoạn, thay thế đoạn trên và đặt nó trở lại ngăn xếp:

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

Nhưng tôi kết thúc với đoạn trong ngăn xếp lại, tại sao ???

+1

bạn đã cam kết giao dịch? – Selvin

+0

@Selvin, CÓ, tôi đã cam kết giao dịch, xem mã cập nhật của tôi trong bài đăng của tôi. –

+0

Tôi cũng thấy điều này. Bạn đã quản lý để giải quyết nó? – span

Trả lời

0

Tôi không chắc chắn câu trả lời ... Có thể cần phải chờ đợi rằng đoạn đã được thêm vào? Hãy thử để được tính bởi điều này

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

thanks a lot !! điều này là dành cho tôi –

+0

Bạn không nên sử dụng bộ hẹn giờ để nghe loại thay đổi này ... Nếu giao dịch mất hơn 50ms thì sao? –

+0

@ tf.alves tôi biết đó là giải pháp bẩn, nhưng nó hoạt động cho tôi. Có thể bạn có đề xuất tốt hơn không? – dooplaye

3

Hãy thử executePendingTransactions() trước Nhật ký để đảm bảo rằng cam kết xảy ra. Như thế này:

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

Hy vọng nó sẽ giúp ...

Các vấn đề liên quan