将自定义属性与使用数据绑定接收参数的函数绑定

问题描述

我有一个片段,它在组件属性上绑定了一个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 (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...