2014-11-13 5 views
1

왜 getChildFragmentManager는 뷰가 생성되기 전에 조각을 가져 와서 바꿀 수 있습니까?'onCreateView'에서 'getChildFragmentManager'를 안전하게 사용할 수 있습니까?

나는 (이전 개발자로부터 상속 된)이 코드를 가지고 있으며, 성공적으로 작동했다.

간단한 코드

public class HostFragment extends Fragment {  
     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     MyFragment myfragment = new MyFragment(); 
     getChildFragmentManager().beginTransaction() 
       .replace(R.id.framelayout, myfragment).commit(); 

     return inflater.inflate(R.layout.fragment_layout, container, false); 
     } 
    } 

fragment_layout.xml

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <FrameLayout 
     android:id="@+id/framelayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_margin="10dp"> 
    </FrameLayout> 
</LinearLayout> 

나는이와 조금 혼란 스러워요. 보기가 아직 존재하지 않으면 어떻게 가능합니까?

답변

1

예, 가능합니다. commit()은 즉시 실행되지 않고 onCreateView() 이후에 실행됩니다. 하지만 팽창시킨 후에 전화 하는게 가장 좋습니다. 그리고 코드가 더 명확해질 것입니다.

FragmentTransaction.commit()

일정은이 트랜잭션의 커밋합니다. 커밋은 즉시 발생하지 않습니다. 스레드가 준비된 다음 번에 수행 될 주 스레드에서 작업으로 예약됩니다.

+0

제발, 참고 자료로 지원할 수 있습니까? –

+0

http://developer.android.com/reference/android/app/FragmentTransaction.html – Reven

관련 문제