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的主要内容,如果未能解决你的问题,请参考以下文章
JetpackDataBinding 架构组件 ( 数据绑定技术简介 | Android 中的 DataBinding 数据绑定 | 启动数据绑定 | 定义数据类 | 布局文件转换 )
Powershell - 在应用程序配置文件中找不到程序集绑定重定向