본문 바로가기
개발 공부 기록하기/- Android

[안드로이드] Fragment BackStack에 대한 고찰.

by soulduse 2016. 3. 10.
반응형
안드로이드 Fragment BackStack에 대한 고찰.


일반적으로 안드로이드 Activity의 경우 BackStack을 제공한다.
예를들어 액티비티 A, B, C 가 있다면
Intent로 A->B->C 로 이동했을시, 휴대폰 뒤로가기 버튼을 누를 시 C->B->A-> 앱 종료
형태로 이루어진다.

Fragment도 마찬가지로 동일한 BackStack을 제공하며 

소스는 다음과 같다.

FragmentManager()
      .beginTransaction()
      .hide(mImageViewerFragment)
      .show( mTextViewerFragment )
      .addToBackStack("TEXT_VIEWER_BACKSTACK")
      .commit();

.addToBackStack을 넣게되면 BackStack기능이 추가되어 작동된다.

하지만 요즘 보통 안드로이드 프로젝트를 생성하면
예전과 달리 Activity가 extends 되어 있는것이 아니라 

public class MainActivity extends AppCompatActivity {

와 같이 제공된다.

이의 경우 FragmentManager()를 사용하여 .addToBackStack()을 입력하면
BackStack의 기능이 먹히질 않는다.


stackoverflow 검색결과 

SupportFragmentManager()를 사용하여야지 BackStack이 동작된다고 한다.

따라서 일반적 Activity를 상송받는 것이아닌, AppCompatActivity를 상속받는 클래스라면 다음과 같이 소스를 변경하여야 한다.


getSupportFragmentManager()
      .beginTransaction()
      .hide(mImageViewerFragment)
      .show( mTextViewerFragment )
      .addToBackStack("TEXT_VIEWER_BACKSTACK")
      .commit();


또한 위의 getFragmentManager()의 경우 내부에 들어가는 프래그먼트 
import android.app.Fragment;

public class TextViewerFragment extends Fragment {


반면 getSupportFragmentManager()의 경우에는 다음과 같은 프래그먼트를 받는다.
import android.support.v4.app.Fragment;

public class TextViewerFragment extends Fragment {


이러한 차이점을 가지며 v4 Fragment와, 기본적인 Fragment의 차이점이라면 아래와 같은 차이점이 있다고한다.
----------------------------------------------------------------------------------------------------------------

앞서서 Fragment는 허니컴(3.x) 부터 등장한 기능인데요 2.3.x 진저브레드 버전등에서 호환이 되지 않는 문제가 있었습니다 .따라서 2.3.x 에 호환하기 위해서 supportV4라는 라이브러리를 추가로 설치하여 진행하였는데요
2016년 1월 현재에는 대부분의 핸드폰이 젤리빈 이상이기때문에
 호환버전이 아닌 정식 Fragment버전으로 진행하도록하겠습니다.


(호환 버전과 정식 버전의 차이는 클래스의 이름 차이로 생각하시면쉽습니다. 이번 강의에서 Fragment를 학습하시고 추가로 2.3.3 버전을 지원하시고싶은 분들은 supportFragmentManager를 검색하셔서 참고하시면됩니다.)





프래그먼트를 제대로 공부해서 제대로된 앱을 만들어보도록 노력할 것이다 ^^ 이상포스팅 끝




















반응형