본문 바로가기

Android

[Android] 안드로이드 Fragment replace할때 onCreate 다시그리기 방지하기

반응형


네비게이션 드로어를 사용하다 보면 아래와 같은 방법으로 Fragment replace를 많이 사용하고는 한다. 하지만, 아래와 같은 방법으로 사용했을때 가장 큰 문제점은 Fragment들이 replace될 때마다 onCreate하여 화면을 다시 그린다는 것이다.


Fragment 라이프사이클도 찾아보고 방법을 생각해 보았지만 화면을 다시 그리는 상황을 막아야할 때 이 문제를 어떻게 해결해야할지 막막했다.


FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.fragment_container, fragment, fragmentTag)

.commitAllowingStateLoss();


조금은 꼼수 같지만 아래와 같은 방법으로 show/hide하여 replace가 아닌 방법으로 사용하도록 만들어 보았다.


public void changeFragment(int fNum) {
android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();

switch (fNum) {
case 0:
if (fragmentManager.findFragmentByTag("a") != null) {
//if the fragment exists, show it.
fragmentManager.beginTransaction().show(fragmentManager.findFragmentByTag("a")).commit();
} else {
//if the fragment does not exist, add it to fragment manager.
fragmentManager.beginTransaction().add(R.id.fragment_container, new FragmentA(), "a").commit();
}
if (fragmentManager.findFragmentByTag("b") != null) {
//if the other fragment is visible, hide it.
fragmentManager.beginTransaction().hide(fragmentManager.findFragmentByTag("b")).commit();
}
break;
case 1:
if (fragmentManager.findFragmentByTag("b") != null) {
//if the fragment exists, show it.
fragmentManager.beginTransaction().show(fragmentManager.findFragmentByTag("b")).commit();
} else {
//if the fragment does not exist, add it to fragment manager.
fragmentManager.beginTransaction().add(R.id.fragment_container, new FragmentB(), "b").commit();
}
if (fragmentManager.findFragmentByTag("a") != null) {
//if the other fragment is visible, hide it.
fragmentManager.beginTransaction().hide(fragmentManager.findFragmentByTag("a")).commit();
}
break;
}
}



* 혹시나 정석정인 방법이 있다고 한다면 누가 가르쳐 주시면 감사하겠습니다.

반응형