blob: 863fc7cb3fef2b58f1c801f6eaed49be669012ff [file] [log] [blame]
package com.google.r4a.examples.explorerapp.common.adapters
import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import androidx.navigation.findNavController
import com.google.r4a.*
/**
* A fragment that uses a Component as it's UI.
*/
abstract class ComposeFragment : Fragment() {
var reference: CompositionReference? = null
abstract fun compose()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
// NOTE(lmr): Should we use FrameLayout or LinearLayout by default?
val root = LinearLayout(inflater.context).apply {
orientation = LinearLayout.VERTICAL
}
// TODO(lmr): right now we use container.findAmbientReference() as a way to allow ComposeFragment work
// seamlessly with FragmentComponent. It works but feels a little bit wrong. Consider better options.
val reference = reference ?: container?.findAmbientReference()
R4a.composeInto(root, reference) {
with(composer) {
provideAmbient(Ambients.Fragment, this@ComposeFragment) {
group(0) {
compose()
}
}
}
}
return root
}
}