본문 바로가기
개발/안드로이드

Fragment 와 에러 - You must call removeView() on the child's parent first.

by darksilber 2016. 4. 15.
반응형

출처 -

 

프래그먼트를 붙이는 작업 도중 아래와 같은 오류가 난다면

Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.


프래그먼트의 onCreateView 함수 내 뷰를 inflate하는 부분을 살펴보자. 여러가지 이유가 있겠지만, 인플레이트를 하면서 컨테이너(container)에 바로 붙여버렸기 때문이다.

프래그먼트 MainListFragment

//MainListFragment
 
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
 
    //마지막 인수가 true이면, 프래그먼트 객체생성하면서 바로 부모에 붙게 된다.
    View rootView = inflater.inflate(R.layout.fragment_main, container, true);
     
    return rootView;
}


 

액티비티에서 아래처럼 프래그먼트를 붙이려고 하면 IllegalStateException 오류가 난다. 아래처럼 하려면, 프래그먼트의 onCreateView에서 inflate의 4번째 변수를 false로 하자.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
 
    if(savedInstanceState == null) {
        mainfrag = new MainListFragment();
        getFragmentManager().beginTransaction()
                .add(R.id.main_container, mainfrag, "MainList").commit();
    }
}
반응형

댓글