프레그먼트간의 이동은 FragmentManager를 통해서 하셔야 합니다.
https://developer.android.com/guide/fragments/fragmentmanager
위의 개발자 문서 링크를 꼼꼼히 읽어 보시기를 추천드리구요.
Fragment도 액티비티처럼 스택개념을 사용하여 관리를 합니다. 즉 A프레그먼트에서 B프레그먼트로 이동한다면,
B
--
A
이런 식으로 스택을 관리하는 겁니다. 다만 프레그먼트 자체를 스택에 쌓지않고 스택의 동작/스텝(?)에 해당하는 transaction이라는 걸 대신 보관합니다. 데이터베이스 트랜잭션과 개념적으로는 비슷한 것으로 보시면 됩니다.
샘플 코드를 보시면 (동작원리는 자바코드를 보는게 더 이해하기가 쉽습니다.)
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_container, ExampleFragment.class, null)
// setReorderingAllowed(true) and the optional string argument for
// addToBackStack() are both required if you want to use saveBackStack().
.setReorderingAllowed(true)
.addToBackStack("replacement")
.commit();
샘플에서 보시면 beginTransaction이라는 메소드를 호출합니다. 프레그먼트 스택에 쌓을 transaction을 정의하는 메소드입니다. commit이 호출되기 전까지의 동작이 스택에 저장이 되는 겁니다.
그리고
add/replace
setReorderingAllowed
addTobackstack
메소드의 조합에 따라 스택이 달라지게 됩니다.
사실 프레그먼트의 스택관리가 안드로이드 개발 중에서 제일 복잡하고 곺치아픈 것 중의 하나입니다. 공부를 엄청 많이 해도 마스터 하기가 좀 처럼 쉽자않은 주제입니다. 따라서 불확실게 있다면, 필요할 때 마다 개발자 문서를 찾아서 확인하는 것이 제일 좋다고 생각됩니다.