이 프로젝트는 xml + Compose로 이루어져있기 때문에,
Fragment위에 ComposeView를 이용하여 Compose 화면을 뛰우고 있다.
이 때, 아래와 같은 BaseFragment를 사용하고 있었는데,
abstract class BaseComposeFragment : Fragment() {
protected abstract val fragmentViewModel: BaseViewModel
private lateinit var composeView: ComposeView
@Composable
abstract fun ComposeLayout()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
return ComposeView(requireContext()).apply {
composeView = this
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewLifecycleOwner.repeatOnStarted {
fragmentViewModel.baseEventFlow.collect { handleEvent(it) }
}
composeView.setContent {
ComposeLayout()
}
}
자기 전에 기술 아티클을 보던 도중 아래와 같은 게시글을 발견하고 리팩토링을 시도하게 되었다.