【发布时间】:2020-06-07 05:40:35
【问题描述】:
我正在通过添加启用数据绑定
数据绑定{ 启用 = 真 }
和
kapt 'com.android.databinding:compiler:3.1.4'
在应用级别build.gradle 文件中。
应用插件:'kotlin-kapt'
被添加到上面。项目基于 kotlin 。
这是我的模型:
package ir.app.myapplication;
data class cisclass(val equRevId:String)
主要活动:
val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
val user = cisclass("123")
binding.setVariable(BR.cis, user)
binding.executePendingBindings()
这是我的布局:
<?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="cis"
type="ir.app.myapplication.cisclass" />
</data>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="5dp"
android:orientation="vertical"
android:scrollbars="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:text="@{cis.equRevId}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
/>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</layout>
我会得到这个错误:
java.lang.IllegalArgumentException: couldn't make a guess for ir.meedc.myapplication.cisclass
at com.squareup.javapoet.Util.checkArgument(Util.java:64)
at com.squareup.javapoet.ClassName.bestGuess(ClassName.java:171)
at android.databinding.tool.ext.ExtKt.toTypeName(ext.kt:244)
at android.databinding.tool.ext.ExtKt.toTypeName(ext.kt:192)
at android.databinding.tool.ext.ExtKt.toTypeName(ext.kt:173)
at android.databinding.tool.writer.BaseLayoutBinderWriter.createVariableFields(BaseLayoutBinderWriter.kt:229)
at android.databinding.tool.writer.BaseLayoutBinderWriter.access$createVariableFields(BaseLayoutBinderWriter.kt:39)
at android.databinding.tool.writer.BaseLayoutBinderWriter$createType$1.invoke(BaseLayoutBinderWriter.kt:67)
at android.databinding.tool.writer.BaseLayoutBinderWriter$createType$1.invoke(BaseLayoutBinderWriter.kt:39)
at android.databinding.tool.ext.Javapoet_extKt.classSpec(javapoet_ext.kt:39)
at android.databinding.tool.writer.BaseLayoutBinderWriter.createType(BaseLayoutBinderWriter.kt:63)
at android.databinding.tool.writer.BaseLayoutBinderWriter.write(BaseLayoutBinderWriter.kt:59)
at android.databinding.tool.BaseDataBinder.generateAll(BaseDataBinder.kt:65)
at com.android.build.gradle.internal.tasks.databinding.DataBindingGenBaseClassesTask$CodeGenerator.run(DataBindingGenBaseClassesTask.kt:212)
at com.android.build.gradle.internal.tasks.databinding.DataBindingGenBaseClassesTask$writeBaseClasses$$inlined$recordTaskAction$1.invoke(AndroidVariantTask.kt:52)
at com.android.build.gradle.internal.tasks.databinding.DataBindingGenBaseClassesTask$writeBaseClasses$$inlined$recordTaskAction$1.invoke(AndroidVariantTask.kt:31)
at com.android.build.gradle.internal.tasks.Blocks.recordSpan(Blocks.java:91)
我该如何解决这个问题?有什么问题?
【问题讨论】:
-
可能是由于变量未初始化,您在绘制活动布局后设置了变量,因此 android 必须在将 textview 膨胀到要渲染的文本上进行猜测
-
感谢您的评论,我该如何解决这个问题?在mainActivity的另一种方法中加载模型?
标签: android kotlin data-binding