DylanCaiCoding / ViewBindingKTX

The most comprehensive utils of ViewBinding. (最全面的 ViewBinding 工具,支持 Kotlin 和 Java 用法,支持 BRVAH,支持封装到基类,支持 DataBinding,支持选择是否使用反射)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关于 ViewBindingUtil.inflateWithGeneric方法使用

stars-one opened this issue · comments

用了一个对话框库(DialogX),想要结合ViewBinding一起使用,但是使用时候报错了,不太理解inflateWithGeneric方法的第一个参数是要传什么...

封装的方法代码:

 private fun <VB:ViewBinding> showDialog(onBind:(vb:VB, dialog:CustomDialog)->Unit) {
        CustomDialog.build()
            .setMaskColor(Color.parseColor("#b3000000"))
            .apply {
                //这个this是什么??
                val binding = ViewBindingUtil.inflateWithGeneric<VB>(this, LayoutInflater.from(ownActivity),RelativeLayout(ownActivity), false)

                setCustomView(object : OnBindView<CustomDialog>(binding.root) {
                    override fun onBind(dialog: CustomDialog, v: View) {
                        onBind(binding,dialog)
                    }
                })
            }.show()

    }

使用:

showDialog<DialogRateBinding> { binding, dialog ->
            //对话框的一些逻辑处理....
          
}

报错:

 java.lang.IllegalArgumentException: There is no generic of ViewBinding.
        at com.dylanc.viewbinding.base.ViewBindingUtil.withGenericBindingClass(ViewBindingUtil.kt:96)
        at com.dylanc.viewbinding.base.ViewBindingUtil.inflateWithGeneric(ViewBindingUtil.kt:45)
        at site.tx.xtproxy.util.Dialogs.showDialog(Dialogs.kt:113)
        at site.tx.xtproxy.util.Dialogs.showRate(Dialogs.kt:38)
        at site.tx.xtproxy.page.TkSettingActivity.onCreate$lambda$2(TkSettingActivity.kt:31)
        at site.tx.xtproxy.page.TkSettingActivity.$r8$lambda$UCr_uFWsiG8qCSv0LPG51z4bleM(Unknown Source:0)
        at site.tx.xtproxy.page.TkSettingActivity$$ExternalSyntheticLambda1.onClick(Unknown Source:0)

正常使用版本:

CustomDialog.build()
            .setMaskColor(Color.parseColor("#b3000000"))
            .apply {
                val binding = DialogRateBinding.inflate(
                    LayoutInflater.from(ownActivity),
                    RelativeLayout(ownActivity),
                    false
                )

                setCustomView(object : OnBindView<CustomDialog>(binding.root) {
                    override fun onBind(dialog: CustomDialog, v: View) {

                    }    
                })
            }.show()