안드로이드 FragmentActivity 전환
조회수 1391회
안드로이드 앱을 만들고 있습니다.
조금 진행을 하다보니 A화면이 처음에 보여도 B화면이 이미 onCreate를 수행한 상태이고 싶습니다.
왜냐면 B에서 구글맵을 띄워 그림을 그려줄 것이기 때문입니다.
여러 조언을 받고, FragmentActivity를 사용해 보니 하나의 FragmentActivity에 처음부터 2개의 fragment를 붙여 둘다 onCraate 되는 모습을 보았습니다.
(단, A B 두개의 Fragment를 만들었어도 A Fragment가 FragmentActivity를 모두 차지합니다.)
<fragment
android:layout_height="match_parent"
android:layout_width="match_parent"
class="com.example.googlemap_test.leftFragment"
android:id="@+id/leftView"/>
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.example.googlemap_test.rightFragment"
android:id="@+id/rightView"/>
이러한 xml코드로 두개의 Fragment 를 붙였습니다.
하지만 이런 식으로 한다면, left fragment에서 rigth fragment로 화면을 변경하고 싶을 때 Main에서 객체로 생성되지 않았기 때문에 replace를 사용하는데 어려움이 있습니다.
이런 상황을 접하니, 처음부터 잘못된 선택을 한 것이 아닌가 싶습니다.
혹시 해결할 수 있는 방법이나, 다른 방법으로 할 수 있는지 궁금합니다. 조언 부탁드립니다.
※잘못 알고 있는 부분이 있다면 알려주세요!
1 답변
-
FragmentTransaction 클래스의 replace() 함수는 본질적으로 기존 프래그먼트를 remove(Fragment)한 뒤, 새로운 프래그먼트를 add(int, Fragment, String)하는 것과 같습니다. 작성한 코드의 의도는 left, right 프래그먼트를 미리 로드해두기 위함인데, 설명한 것처럼 프래그먼트 간 이동을 위해 replace()를 사용한다면 right -> left로 이동할 때 right 프래그먼트는 종료 루틴을 타게됩니다. 이렇게 되면 다시 right로 이동할 때, 프래그먼트를 새로 생성 후 액티비티에 추가하겠다는 의미가 되므로 의도(=preload)와 맞지 않을 가능성이 높습니다.
그리고 (테스트를 해보셨다면 아시겠지만) XML을 통해 이미 액티비티에 추가된 프래그먼트의 인스턴스를 이용한 add()와 replace()는 동작하지 않습니다. (이미 해당 인스턴스의 프래그먼트가 액티비티에 추가된 상태이기 때문에 의도한대로 화면 전환이 일어나지 않을거에요)
지금 코드에서 큰 변경없이 작업하는 방법은 show(Fragment) / hide(Fragmet)가 아닐까 싶고요. 아래 코드를 참고하셔서 상태 변경 시 프래그먼트의 노출을 제어해보세요.
supportFragmentManager.beginTransaction() .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out) .show(rightFragmeht) .commit() supportFragmentManager.beginTransaction() .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out) .hide(leftFragment) .commit()
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력