마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Fragement를이용하여 Tab이동시 Create문제..

0 추천
안녕하세요. 초보개발자입니다.

 

현재 프레그먼트를 이용하여 탭을 만들었습니다.매번 탭 이동시 framelayout에 replace를 사용하여 보여지게 하는데 항상 create를 타는 문제가 발생하는데.. replace말고 다른것을 이용해야 할거 같은데..(add는 뒤에 레이아웃이 터치되는 문제)

정확히 어떤것을 이용하는지 모르겠습니다.

TabActivity를 이용하면 탭이동시 create를 타지 않았는데 fragement는 항상 타는것 같아 궁금해서 질문을 올리게 되었습니다. 감사합니다.
나바이어 (220 포인트) 님이 2013년 10월 8일 질문
저도 이 문제 때문에 고민인데...

혹시 해결하셨나요?..
아니요...ㅠ 아직 해결하지 못했습니다..

1개의 답변

0 추천
attach, detach 사용해 보세요.
whitesnow (8,920 포인트) 님이 2013년 10월 8일 답변
죄송하지만 첨에 한번 생성한후에 두번째부터 attach, detach 를 사용하는건가여?? 아무리 찾아봐도 자세한 정보는 없어서요.. ㅠ
처음에는 add로 넣으시고 그 다음부터  attach, detach 사용하시면 됩니다.
답변에 대해 정말 감사합니다.
현재 저는 처음 탭을 불러올때 add를 하고 두번째탭을 눌렀을시 첫번째 프레그먼트를 detach를 하게 만들고 다시 첫번째를 탭할시 attach를 하였는데.. 계속 create는 불리워지네요.. 무언가 문제가 있는걸까요?
remove를 호출하지 않으셨다면 자동으로 fragment가 destroy 되지는 않을텐데요. 자세한건 간단한 소스라도 있어야 알 수 있겠네요.
다시 답변에 감사드립니다.
현재는    
private void settingTab1(){
Tab1Fragment tab1 = new Tab1Fragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.remove(tab1);
ft.replace(R.id.framelayout, tab1, "list");
ft.commit();
}

바뀐후에는
Tab1Fragment tab1;
Tab2Fragment tabf2;

private void settingTab1(){
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
            if(tab1==null){
                tab1 = new Tab1Fragment();
                ft.add(R.id.framelayout, tab1, "list");   
            }else{
                ft.attach(tab1);
            }

            if(tab2!=null){
                ft.detach(tab2);   
            } // 이부분은 탭2에서 1을눌렀을때 사용해야 하지 않나 생각했습니다.

            ft.commit();
            clearFrag();
}


    private void settingTab2(){
   
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
            if(tab1!=null){
                ft.detach(tab1);   
            }
            if(tab2 ==null){
            tab1 = new Tab1Fragment();
            ft.add(R.id.framelayout, tab2, "store");
            }else{
                ft.attach(tab2);
            }
            ft.commit();
}

이런식으로 바껐는데.. 이해하실지 모르겠네여.. fragment를 이용하면 편하긴 한데.. 매번 create를 타는 문제가.. 해결되지 않으니.. ㅠ 난감하네요.. 죄송하지만  좀 더 가르쳐 주시면 감사하겠습니다.
settingTab1에서 clearFrag는 뭐하는 건가요??
아저건.. 그저 addToBackStack(null); stack이 쌓였을때 없애주는 메소드 입니다. addtobackstack으로 들어간다음에 다음탭으로 이동시 back버튼을 누르면 쌓인 stack으로 가서 탭을 이동할때마다 스택을 없애주고 있습니다.
코드는 문제 없어 보이는데요. clearFrag는 없어도 될거 같고요.
그래도 계속 onCreate 호출된다면 로그나 디버거로 프레그먼트 라이프 사이클 찍어보면서 봐야할거 같네요.
넵 댓글 정말 감사합니다~^^ 좋은 하루 되세요~!
...