diff --git a/hikage-core/src/main/java/com/highcapable/hikage/core/Hikage.kt b/hikage-core/src/main/java/com/highcapable/hikage/core/Hikage.kt index 62d1fc2..ccb89e9 100644 --- a/hikage-core/src/main/java/com/highcapable/hikage/core/Hikage.kt +++ b/hikage-core/src/main/java/com/highcapable/hikage/core/Hikage.kt @@ -545,7 +545,7 @@ class Hikage private constructor(private val factories: List) { val view = createView(classOf(), id, context) view.layoutParams = lpDelegate.create() requireNoPerformers(classOf().name) { view.init() } - startProvide(id) + startProvide(id, classOf()) addToParentIfRequired(view) return view } @@ -588,7 +588,7 @@ class Hikage private constructor(private val factories: List) { val view = createView(classOf(), id, context) view.layoutParams = lpDelegate.create() requireNoPerformers(classOf().name) { view.init() } - startProvide(id) + startProvide(id, classOf()) addToParentIfRequired(view) newPerformer(view).apply(performer) return view @@ -625,7 +625,7 @@ class Hikage private constructor(private val factories: List) { id: String? = null ): View { val view = context.layoutInflater.inflate(resId, parent, attachToRoot = false) - startProvide(id, view) + startProvide(id, view.javaClass, view) lparams?.create()?.let { view.layoutParams = it } provideView(view, id) addToParentIfRequired(view) @@ -645,7 +645,7 @@ class Hikage private constructor(private val factories: List) { ): VB { val viewBinding = ViewBinding().inflate(context.layoutInflater, parent, attachToParent = false) val view = viewBinding.root - startProvide(id, view) + startProvide(id, view.javaClass, view) if (view.parent != null) throw ProvideException( "The ViewBinding($view) already has a parent, " + "it may have been created using layout root node or , cannot be provided." @@ -670,7 +670,7 @@ class Hikage private constructor(private val factories: List) { id: String? = null ): View { if (view.parent != null) throw ProvideException("The view $view already has a parent, cannot be provided.") - startProvide(id, view) + startProvide(id, view.javaClass, view) val lpDelegate = LayoutParams.from(current = this@Hikage, lpClass, parent, lparams, view.layoutParams) view.layoutParams = lpDelegate.create() provideView(view, id) @@ -707,7 +707,7 @@ class Hikage private constructor(private val factories: List) { id: String? = null ): Hikage { val view = hikage.root - startProvide(id, view) + startProvide(id, view.javaClass, view) val lpDelegate = LayoutParams.from(current = this@Hikage, lpClass, parent, lparams, view.layoutParams) if (view.parent != null) throw ProvideException( "The Hikage layout root view $view already has a parent, cannot be provided." @@ -778,12 +778,13 @@ class Hikage private constructor(private val factories: List) { /** * Call to start providing a new view. * @param id the view id. + * @param viewClass the view class. * @param view the view instance. */ - private inline fun startProvide(id: String?, view: V? = null) { + private fun startProvide(id: String?, viewClass: Class, view: V? = null) { provideCount++ if (provideCount > 1 && (parent == null || !attachToParent)) throw ProvideException( - "Provide view ${view?.javaClass ?: classOf()}(${id?.let { "\"$it\""} ?: ""}) failed. ${ + "Provide view ${view?.javaClass ?: viewClass}(${id?.let { "\"$it\""} ?: ""}) failed. ${ if (parent == null) "No parent view group found" else "Parent view group declares attachToParent = false" }, you can only provide one view for the root view."