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

Posted

技术标签:

【中文标题】Android 数据绑定:在生成的数据绑定文件中找不到 ...BindingImpl【英文标题】:Android databinding: cannot find ...BindingImpl in generated databinding file 【发布时间】:2019-08-21 19:35:09 【问题描述】:

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

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_
        android:layout_
        android:orientation="vertical"
        tools:context=".fragments.ShopFragment">

        <TextView
            android:text="@viewModel"
            android:layout_
            android:layout_ />

    </LinearLayout>
</layout>

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

【问题讨论】:

error: cannot find symbol import com.gourav.news.databinding.ActivityDetailBindingImpl;的可能重复 有时间会查的 【参考方案1】:

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

【讨论】:

【参考方案2】:

在 textView 标记内的 xml 代码中,对于 android:text 属性,您使用了 @viewmodel。它只是引用您的 shopViewModel 类,您必须针对该类中的文本变量。然后是一代。类文件错误将消失。

bindingImpl 错误主要是由于无效而生成的 XML-text 或 XML-onClick 属性的分配。

【讨论】:

【参考方案3】:

如果您有时使用双向数据绑定(@=myBindingValue,使用 '=' 符号而不是 @myBindingValue),您会遇到这个无用的一般错误,因为您正在尝试的值在 Kotlin 中,to bind 被声明为 immutable => val 而不是 var 在您的数据类中。

示例:

data class User(
   val name,
   var email
)

在本例中,您可以将用户的电子邮件变量绑定为:text="@=myViewModel.user.email" 但是,如果你尝试绑定用户名:text="@=myViewModel.user.name",你会得到这个错误。

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

我有一个BindingAdapter 标记,它存在于一个无法访问 模块中。

【讨论】:

以上是关于Android 数据绑定:在生成的数据绑定文件中找不到 ...BindingImpl的主要内容,如果未能解决你的问题,请参考以下文章

Android官方文档之DataBinding库

JetpackDataBinding 架构组件 ( 数据绑定技术简介 | Android 中的 DataBinding 数据绑定 | 启动数据绑定 | 定义数据类 | 布局文件转换 )

未生成数据绑定类

Powershell - 在应用程序配置文件中找不到程序集绑定重定向

一种动态写入apk数据的方法(用于用户关系绑定添加渠道号等)

Android View Binding的使用