如何解决将自定义属性与使用数据绑定接收参数的函数绑定
我有一个片段,它在组件属性上绑定了一个viewmodel函数:
class MyFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?): View? {
val binding: FragmentMyBinding = DataBindingUtil
.inflate(inflater,R.layout.fragment_my,container,false)
binding.lifecycleOwner = viewLifecycleOwner
binding.customComponent.onCodeChanged = { code -> viewModel.onCodeChanged(code) }
return binding.root
}
ViewModel上的绑定函数:
fun onCodeChanged(code: CharArray) {
...
}
这按预期工作。然后,我试图将该绑定操作移至XML文件上的适当数据绑定:
<com.example.android.CustomComponent
android:id="@+id/custom_component"
onCodeChanged="@{(code) -> viewModel.onCodeChanged(code)}"
... />
我为此使用了自定义绑定适配器:
@BindingAdapter("onCodeChanged")
fun setOnCodeChanged(view: CustomComponent,callback: (code: CharArray) -> Unit) {
view.onCodeChanged = callback
}
这将在编译时失败,但我找不到原因。
- 错误:找不到符号导入com.example.android.databinding.MyFragmentBindingImpl; 符号:class MyFragmentBindingImpl
- 执行org.jetbrains.kotlin.gradle.internal.KaptExecution 时发生故障
我为此尝试了不同的语法:
onCodeChanged="@{(code) -> viewModel.onCodeChanged(code)}"
onCodeChanged="@{(code) -> viewModel.onCodeChanged}"
onCodeChanged="@{code -> viewModel.onCodeChanged}"
onCodeChanged="@{code -> viewModel.onCodeChanged(code)}"
我在做什么错?我以前使用不接收参数的函数进行了尝试,在那些情况下效果很好。
此外,我在模块gradle文件上启用了数据绑定:
buildFeatures {
dataBinding = true
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。