Android 数据绑定:在生成的数据绑定文件中找不到 ...BindingImpl

Android databinding: cannot find ...BindingImpl in generated databinding file

我正在尝试使用示例项目 android-sunflower 对视图模型进行数据绑定。当前的问题是,当我尝试构建项目时,我在 class DataBindinMapperImpl 中收到错误 error: cannot find symbol symbol: class FragmentShopBindingImpl location: package {{packageName}}.databinding 我不太确定我在这里遗漏了什么,因为我添加了示例项目中的所有内容。 class FragmentShopBindingImpl 不会生成,或者不应该生成吗?因为我在 android 向日葵示例
中看不到任何以 'Impl' 结尾的 class 我的代码:

override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

        val factory = InjectorUtils.provideShopViewModelFactory(context!!)
        val shopViewModel = ViewModelProviders.of(this, factory)
            .get(ShopViewModel::class.java)

        val binding = DataBindingUtil.inflate<FragmentShopBinding>(
            inflater, R.layout.fragment_shop, container, false).apply {
            viewModel = shopViewModel
            lifecycleOwner = this@ShopFragment
        }

        return binding.root
    }

布局:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable
            name="viewModel"
            type="{{packageName}}.viewmodel.ShopViewModel" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".fragments.ShopFragment">

        <TextView
            android:text="@{viewModel}"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </LinearLayout>
</layout>

生成文件的图像(忽略{{packageName}}:

看来我唯一需要添加的是数据标签中的 <import type="android.view.View" /> ...

在 textView 标签内的 xml 代码中,您使用了 @{viewmodel} 作为 android:text 属性。它只是引用您的 shopViewModel class,您必须以 class 中的文本变量为目标。然后是将军。 class 文件错误将消失。

bindingImpl errors are mostly generated for invalid assignment for XML-text or XML-onClick attributes.

如果您有时使用双向数据绑定(@={myBindingValue},使用 '=' 符号而不是 @{myBindingValue}),您会得到这个无用的一般错误,因为您尝试绑定的值在您的数据 class.

例子:

data class User(
   val name,
   var email
)

在此示例中,您可以将用户的电子邮件变量绑定为:text="@={myViewModel.user.email}" 但是,如果您尝试绑定用户名:text="@={myViewModel.user.name}" 您将收到此错误。

您必须在下面将变量定义为 ObservableField :

 public final ObservableField<String> name = new ObservableField<>();
 public final ObservableField<String> family = new ObservableField<>();

我出现了同样的错误,但这是因为我的 android:text="@={...}" 在 editText 之外。

我有一个 BindingAdapter 标签存在于 无法访问的 模块中。