
프래그먼트란, 액티비티(Activity) 내에서 재사용 가능한 모듈 혹은 UI 구성 요소이다.
액티비티 전환은 전체화면이 새롭게 그려지는 반면, 프래그먼트는 하나의 액티비티 내에서 일부분을 교체하여 화면을 구성의 변화를 주기 때문에 조각화면(fragment) 으로도 구성할 수 있어 더 적은 리소스와 시간을 사용하여 원하는 결과를 얻을 수 있다.
여러개의 프래그먼트를 하나의 액티비티에 조합하여 여러 UI를 구축 가능.
자체 라이프 사이클(생명주기)를 갖고 있어, 액티비티와 독립적으로 코드를 관리 가능.
(액티비티에서 그려지는 것이기 때문에 독자적으로 사용은 불가. 액티비티나 프래그먼트 뷰 계층에 속한다.)
프래그먼트를 사용하면 한 화면의 일부분을 다른 화면에서도 사용할 수 있게 되어, 화면 구성의 재사용성이 높아짐.
앱의 구조를 프래그먼트 단위로 나눠 관리할 수 있어 모듈화가 되며, 이를 통해 각 모듈별로 쉽게 수정하거나 업데이트할 수 있어 유지 보수가 더 편리.
Fragment는 호스팅한 Activity나 Fragment가 Started거나 이상인 경우에 Fragment를 추가, 교체, 삭제할 수 있고, 이 과정에서 생명주기를 갖는다.
이렇게 추가, 교체, 삭제된 기록들은 FragmentManager로 의해 백스택에 저장된다.
프래그먼트 생명주기
어떤 버튼을 눌렀을 때, (액티비티 -> 프래그먼트) (프래그먼트 -> 프래그먼트) 로 이동시키는 간단한 예제를 준비해보았다.
ex)
val binding = Fragment1Binding.inflate(inflater, container, false)
//뷰 바인딩 설정.
binding.myButton.setOnClickListener {...}
//바인딩 사용
return binding.root
//레이아웃 뷰 반환.
//onCreateView() 메소드에서 반환하는 뷰를 화면에 띄우게 된다.
//현재는 onCreateView() 내부에서 binding 변수를 만들어 지역변수 처럼 사용하고 있지만
lateinit 등을 활용해 전역변수로 선언해 사용해도 된다.
FragmentManager : 백스택 관리, FragmentTransaction 등을 생성하는 클래스.
FragmentTransaction : Android Jetpack Fragment 라이브러리에서 제공하는 클래스로 프래그먼트를 '추가, 교체, 삭제' 작업을 제공. 프래그먼트 백 스택관리, 프래그먼트 전환 애니메이션 설정가능.
//바인딩을 사용해 레이아웃의 버튼을 눌렀을 때,
만들어놓은 프래그먼트로 넘어가게 만드는 코드이다.
...
binding.togoFragment1.setOnClickListener{
val fragment1 = Fragment1()
supportFragmentManager
.beginTransaction()
.add(R.id.framelayout, fragment1)
.commit()
}
...
//supportFragmentManager를 사용하여 지원 라이브러리의 FragmentManager에 접근하고,
프래그먼트 트랜잭션을 시작하고 관리할 수 있다.
친구들과 협업할 때 버스타지 않고 함께 개발하고 싶다는 생각과
발전의 흥미로 천천히 연습한 것을 기록해 봅니다 ✍️
더하여서 계획하는 프로젝트에 한 걸음 더 나아가고파요.
프래그먼트를 활용하는 jetpack Navigation 라이브러리 정리도 조만간 해볼게요.