Closed ivotai closed 1 year ago
你有在gradle中开启viewBinding或者databinding框架吗?
两者都没启用则getBinding()
方法不允许调用
我viewBinding是开了的,不知道为什么还是会出现这个异常
可能没打开kapt插件, 建议下载demo多试试排查下
需要在 生命周期方法里如onBind 这些根据itemViewType判断后才可使用
长时间没有回复本问题关闭
@liangjingkanji 单一类型没有问题 多类型会崩溃
@wlqjj0 崩溃请fork仓库复现问题或者提交崩溃日志
我认为几乎可以肯定是你代码写错了
@liangjingkanji 最新仓库代码 都注释了
@wlqjj0 让fork仓库复现问题, 不是让发截图
我现在只能猜测你的问题大概是 你用getBinding()
但是你没有给布局添加layout
标签, 导致自动去使用ViewBinding, 然后你又没有在gradle启用viewBinding
算是很低级的问题了
@liangjingkanji 这是跑的你的仓库代码 我看你也开启了 没开启没有layout标签怎么生成的viewBinding 单一类型为什么可以 多类型就不行
也算是很低级的诊断了
@liangjingkanji 这是跑的你的仓库代码 我看你也开启了 没开启没有layout标签怎么生成的viewBinding 单一类型为什么可以 多类型就不行
也算是很低级的诊断了
你fork后复现问题把地址给我吧, 既然demo仓库我觉得问题就很简单了
请问这个问题现在有解决方式了吗?因为我在项目中也碰到了同样的问题。使用getBinding去反射获取ViewBinding时报错。
请问这个问题现在有解决方式了吗?因为我在项目中也碰到了同样的问题。使用getBinding去反射获取ViewBinding时报错。
这个问题并没有被证明存在
项目是多module组件化项目吗? 请截图给我看下是否打开ViewBinding和Kapt
这个问题我修改sample代码复现了, 因为getBinding<ViewBinding>()
使用的是接口泛型, 导致反射失败
由于sample中使用到R.layout.item_simple_text
其被layout
标签包裹, 导致被DataBinding填充所以不存在此崩溃问题
when (val viewBinding = getBinding<ViewBinding>()) {
is ItemViewBindingBinding -> {
viewBinding.tvSimple.text = layoutPosition.toString()
}
is ItemCommentBinding -> {
viewBinding.tvContent.text = layoutPosition.toString()
}
}
以上为错误多类型判断, 改为以下方式即可
when (itemViewType) {
R.layout.item_view_binding -> {
val viewBinding = getBinding<ItemViewBindingBinding>()
viewBinding.tvSimple.text = layoutPosition.toString()
}
R.layout.item_comment -> {
val viewBinding = getBinding<ItemCommentBinding>()
viewBinding.tvContent.text = layoutPosition.toString()
}
}
我会同步更新sample示例代码
该问题其实十分简单, 源码不到10行, 但是没有人真正去复现问题导致未发现问题, 所以我在提问模板中强调希望开发者fork仓库复现问题 本项目将近350个issues问题绝大部分全是寻求帮助做不到每个问题由作者去复现, 并且还需要维护文档/sample/其他开源项目
欢迎star项目让更多人参与/完善项目, 以及让我知道有多少人需要这个开源项目
问题描述
在多类型中使用
val binding = getBinding<ViewBinding>()
区分,报错如下 Caused by: java.lang.NoSuchMethodException: androidx.viewbinding.ViewBinding.bind [class android.view.View] ViewBinding 源码没有 bind 方法啊。