Czar
02/15/2018, 6:37 PMabstract class BaseFragment<T : ViewDataBinding, K : ViewModel>
private constructor(
@LayoutRes private val layoutId: Int,
private val modelType: Class<K>
) : Fragment() {
protected lateinit var viewModel: K
protected lateinit var binding: T
protected abstract fun bindViewModel(binding: T, viewModel: K)
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
viewModel = ViewModelProviders.of(this).get(modelType)
binding = DataBindingUtil.bind(container?.inflate(layoutId))
bindViewModel(binding, viewModel)
setHasOptionsMenu(true)
return binding.root
}
companion object {
operator inline fun <K> invoke(layoutId: Int) =
BaseFragment(layoutId, K::class.java)
}
}