我尝试使用示例项目android-sunon对视图模型进行数据绑定,当前的问题是,当我尝试构建项目时,在类DataBindinMapperImpl
中得到了错误error: cannot find symbol symbol: class FragmentShopBindingImpl location: package {{packageName}}.databinding
,我不确定这里遗漏了什么,因为我添加了示例项目中的所有内容,类FragmentShopBindingImpl
没有生成。因为我在android sunon的例子中看不到任何以'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_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}}:
8条答案
按热度按时间sz81bmfz1#
看起来我唯一要添加的是数据标签中的
<import type="android.view.View" />
。gg0vcinb2#
在textView标签内的xml代码中,您已使用@{viewmodel}作为android:text属性。它仅引用shopViewModel类,您必须将该类内的text变量作为目标。然后gen. class文件错误将消失。
bindingImpl错误主要是由于XML文本或XML-onClick属性的无效赋值而生成的。
ix0qys7i3#
如果你有时候使用双向数据绑定(
@={myBindingValue}
,带有**'='符号而不是@{myBindingValue}
),你会遇到这个无用的一般性错误,因为你试图绑定的值在你的数据类的Kotlin中被声明为immutable =〉val而不是var**。示例:
在此示例中,您可以将用户的email变量绑定为:
text="@={myViewModel.user.email}"
但是,如果您尝试绑定用户名:text="@={myViewModel.user.name}"
您将收到此错误。mpbci0fu4#
您必须在下面将变量定义为ObservableField:
eanckbw95#
我也出现了同样的错误,但这是因为我的
android:text="@={...}"
在edittext之外。jmo0nnb36#
我有一个
BindingAdapter
标记出现在一个 unreachable 模块中。l5tcr1uw7#
我的问题是,有多个限定符布局的例子,我有一个为夜间模式和基本文件,我只是在基本文件,而不是在其他限定符资源文件的变化,一旦我在所有限定符的变化,它为我工作。
eqqqjvef8#
我有一个类似的错误信息,但问题是不同的。虽然我看到OP的问题已经解决了,但在玩MVVM架构时,同样的错误信息可能经常弹出。(顺便说一句,我用Java给出了我的答案,但问题可以用类似的方式解决)
基本上,当这个错误消息
弹出时,它不会告诉您任何错误信息。当编译器由于绑定的某些问题而无法生成
xxxBindingImpl
类(该类应该是自动生成的)时,它会弹出。对于我来说,通过运行
./gradlew :app:build --stacktrace
检查错误的实际来源帮助很大,主要是以下问题之一:1.有些属性没有默认的绑定适配器,例如
android:layout_width
和android:src
。在这种情况下,您需要通过添加@BindingAdapter
标记来为属性自己设置绑定适配器:1.缺少导入:当您使用的类不是xml中的基元类型之一时,必须使用FULL PATH导入类,如下所示: