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


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

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

  • 2016년 03월 25일에 작성됨
    프로그래밍을 공부하는 학생입니다!

조회수 327


1 답변


좋아요
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를 쓰시면 과도한 서버 호출이 일어나지 않을 수도 있을 것 같네요.

  • 2016년 03월 25일에 작성됨
    모바일 데이터 베이스를 만드는 yet another nit picker.

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

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close