Android FragmentTransaction에서 fragment를 replace할 경우 fragment lifecycler이 destroy되고 onCreate 되는데, 혹시 이 부분도 제어할 수 있나요. gc가 잡아먹지않게 (destroy안시키도록)

조회수 1639회

현제 tab을 구현해서 FrameLayout에 fragment를 FragmentTransaction으로 replace로 view를 그려주고 있습니다. 2개의 fragment 모두 다 서버 콜로 item들을 불러오고 있는데요. replace될 때 마다 매번 onCreateView가 다시 불려져서 계속 서버콜을 날리는데 혹시, replace할 때 destroy되지 않고, 최초에 onCreateView됬을 시에만 서버콜로 서버에서 item들을 들고 오는 방법은 없을까요?

아니면 지금 구조가 fragment에서 서버콜을 하는데 이걸 activity에서 서버콜로 들고오는 구조로 바꾸는게 더 좋을까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 수동으로 탭을 구현하고 FragmentTransaction로 관리하시는 것인가요? 만약 그러시다면 FragmentTabHost를 써보시는 것이 더 나을 것 같습니다. 프래그먼트를 여러 탭에 둘 수 있고 다른 탭으로 이동하기 위해 프래그먼트의 트랜잭션을 요구하지 않을 것입니다.

    mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
    mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
    mTabHost.addTab(mTabHost.newTabSpec("simple").setIndicator("Simple"), FragmentStackSupport.CountingFragment.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator("Contacts"), LoaderCursorSupport.CursorLoaderListFragment.class, null);        
    mTabHost.addTab(mTabHost.newTabSpec("custom").setIndicator("Custom"), LoaderCustomSupport.AppListFragment.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("throttle").setIndicator("Throttle"), LoaderThrottleSupport.ThrottledLoaderListFragment.class, null);
    

    2개의 프래그먼트라고 하셨으니 어쩌면 FragmentTabHost를 쓰시면 과도한 서버 호출이 일어나지 않을 수도 있을 것 같네요.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 답변 감사합니다! TabHost로 바꿔서 Fragment내에 onCreate(onCreateView 말고) 부분에서 서버콜을 날리는 구조로 변경 했습니다. 그런데 현제 tabHost에 추가된 (tab + fragment) 외의 다른 fragment(tab에 없는)로 replace하는 부분을 구현하고 있는데, 적절한 내용이 없네요 ㅠㅜ 혹시 이거에 대한 조언 좀 부탁드려도 될까요? 알 수 없는 사용자 2016.3.26 00:35

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)