Jetpack Compose | Compose를 이용하는 BaseFragment

·

Compose 도입 이전에도 Activity 와 Fragment, ViewModel 등 공동으로 적용되어야 하는 부분에 대해서 Base 클래스를 만들어왔다. 무엇보다도 Compose를 이용하여 UI를 구성 할 때, Theme를 일괄적으로 적용하기 위한 작업이 필요했다.

Compose로 구성되는 Fragment의 BaseFragment 부모 클래스를 다음과 같이 작성해보았다. 기존 BaseFragment가 있기 때문에 이름은 ComposeBaseFragment 정도로 명명했다.

abstract class ComposeBaseFragment<R : BaseViewModel> : Fragment() {
    abstract val viewModel: R

    @Composable
    abstract fun Compose()

    abstract fun afterCompose()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val compose = ComposeView(requireContext()).apply {
            setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
            setContent {
                MaterialTheme {
                    Compose()
                }
            }
        }
        afterCompose()
        return compose
    }
}

이 ComposeBaseFragment 를 상속해서 만든 Fragment 에서는

“Compose” Composable 함수 안에 Compose 코드들을 구성하고, afterCompose() 에서는 컴포즈 구성 이후 실행되어야 하는 다른 코드들을 작성할 수 있다.

필요에 따라 beforeCompose() 와 같은 함수를 만들어서 컴포즈 구성 이전에 실행되어야 하는 코드를 작성할 수도 있다.

In:

Tags:

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다