[안드로이드 공부]/프래그먼트

[안드로이드] 프래그먼트에서 뷰 제거 확실하게 하기 -You must call removeView()

코코모아 2015. 12. 14. 12:06

아래는 코모스튜디오가 직접 만든 무료 앱이에요
(한 번만 봐주세요 ^^)

01

02

03

정각알림 만들기(말하는시계)

말하는 시계 (취침, 자전거) 

말하는 타이머 음성 스톱워치 


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


뷰페이져에 달린 얘들에서 디스트로이 뷰 하면서 제거 해줘야 한다.

    @Override

    public void onDestroyView() {

        super.onDestroyView();

       if(mRootView !=null){

             ViewGroup parentViewGroup = (ViewGroup) mRootView.getParent();

             if( null != parentViewGroup ) {

                parentViewGroup.removeView( mRootView );

             }

       }

    }



굳이 

메인 프래그먼트는 destroy 안해도 된다. 디스트로이 하면 죽는다. 아래 처럼.


java.lang.RuntimeException: Unable to destroy activity {com.comostudio.aaa/com.comostudio.aaa.ui.MainActivity}: java.lang.NullPointerException


요래... 지우고 시작 하지..


    @Override

    public View onCreateView(LayoutInflater inflater, ViewGroup container,

                             Bundle savedInstanceState) {

        //super.onCreateView(inflater, container, savedInstanceState);

        // Inflate the layout for this fragment

        if(mRootView == null) {

            container.removeAllViews();

try{

                mRootView = inflater.inflate(R.layout.aaa, container, false);

            }catch (InflateException e) {

                e.printStackTrace();

            }

그리고, contanier, false를 꼭 해주도록.




그러나 아직 완전히 끝난 것은 아니다.

//Caused by: java.lang.IllegalStateException:  The specified child already has a parent.

        // You must call removeView() on the child's parent first.

if(mRootView==null){

}else {

        //꼭 여기 해줘야 한다.. 

            ViewGroup parentViewGroup = (ViewGroup) mRootView.getParent();

            if (null != parentViewGroup) {

                parentViewGroup.removeView(mRootView);

            }

        }

여기서 해줘야 완전히 끝난다.


onCreateView에 여러번 들어 오는데... 올 때 마다 검사해서 아빠를 없애야 한다...


이게..

100% 재현 경로

앱 포즈하고

노티 제거 하고

앱 실행 하고

앱 포즈 하고

노티 실행 하면 죽음.


프래그먼트는 알고 쓰면 달고 모르고 그냥 쓰면 쓴지 단지도 모른다... 

나는 아직도 모르고 그냥 쓰지도 못한다....

모든 게시물은 코모스튜디오의 소유이며, 무단 복제 수정은 절대 불가입니다.
퍼가실 경우 댓글과 블로그 주소를 남기고 해당 게시물에 출처를 명확히 밝히세요.