Kotlin:使用 Observables 更新 UI 的未解决参考
Kotlin: unresolved reference for Updating UI using Observables
我正在学习 android 的 kotlin 和数据绑定。我能够 运行 数据绑定功能。当我使用 Observable 时,我得到了 BR.property
的未解析引用
这是我的model class
:
data class FruitModel(var fruitImage: String?, var fruitName: String?) : BaseObservable() {
var imageUrl: String? = fruitImage
get() = field
set(value) {
field = value
notifyPropertyChanged(BR.imageUrl)
}
var nameValue: String? = fruitName
get() = field
set(value) {
field = value
notifyPropertyChanged(BR.fruitModel)
}
}
我能够得到 BR.fruitModel
而不是以上两个。这是我的 xml
:
<data>
<variable name="onClickItem"
type="com.wings.kotlintest1.interfaces.FruitAdapterInterface"/>
<variable name="fruitModel"
type="com.wings.kotlintest1.model.FruitModel"/>
<variable name="position"
type="int"/>
</data>
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
card_view:cardCornerRadius="5dp"
android:onClick="@{() -> onClickItem.onClickItemListener(position)}">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/ivFruitImage"
android:layout_width="50dp"
android:layout_height="50dp"
app:loadImageWithGlide="@{fruitModel.fruitImage}"/>
<TextView
android:id="@+id/tvFruitName"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="10dp"
android:gravity="center_vertical"
android:textColor="@color/colorAccent"
android:textSize="18sp"
android:text="@{fruitModel.fruitName}"/>
</LinearLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
what is reason that BR class is not generating properties? Am I doing
something wrong?
您的完整布局必须在 <layout> ... </layout>
内。
另外,尝试清理和构建您的项目。
您还可以在构建 window.
下的堆栈跟踪中跟踪您的错误行
我认为您需要将 @Bindable 属性 添加到这些字段的 get() 中。看
https://developer.android.com/topic/libraries/data-binding/observability
我认为你需要使用 @get:Bindable
data class FruitModel(var fruitImage: String?, var fruitName: String?) : BaseObservable() {
@get:Bindable
var imageUrl: String? = fruitImage
get() = field
set(value) {
field = value
notifyPropertyChanged(BR.imageUrl) // **unresolved reference : BR.imageUrl**
}
@get:Bindable
var nameValue: String? = fruitName
get() = field
set(value) {
field = value
notifyPropertyChanged(BR.nameValue) // **unresolved reference : BR.nameValue**
}
}
我正在学习 android 的 kotlin 和数据绑定。我能够 运行 数据绑定功能。当我使用 Observable 时,我得到了 BR.property
这是我的model class
:
data class FruitModel(var fruitImage: String?, var fruitName: String?) : BaseObservable() {
var imageUrl: String? = fruitImage
get() = field
set(value) {
field = value
notifyPropertyChanged(BR.imageUrl)
}
var nameValue: String? = fruitName
get() = field
set(value) {
field = value
notifyPropertyChanged(BR.fruitModel)
}
}
我能够得到 BR.fruitModel
而不是以上两个。这是我的 xml
:
<data>
<variable name="onClickItem"
type="com.wings.kotlintest1.interfaces.FruitAdapterInterface"/>
<variable name="fruitModel"
type="com.wings.kotlintest1.model.FruitModel"/>
<variable name="position"
type="int"/>
</data>
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
card_view:cardCornerRadius="5dp"
android:onClick="@{() -> onClickItem.onClickItemListener(position)}">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/ivFruitImage"
android:layout_width="50dp"
android:layout_height="50dp"
app:loadImageWithGlide="@{fruitModel.fruitImage}"/>
<TextView
android:id="@+id/tvFruitName"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="10dp"
android:gravity="center_vertical"
android:textColor="@color/colorAccent"
android:textSize="18sp"
android:text="@{fruitModel.fruitName}"/>
</LinearLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
what is reason that BR class is not generating properties? Am I doing something wrong?
您的完整布局必须在 <layout> ... </layout>
内。
另外,尝试清理和构建您的项目。
您还可以在构建 window.
我认为您需要将 @Bindable 属性 添加到这些字段的 get() 中。看 https://developer.android.com/topic/libraries/data-binding/observability
我认为你需要使用 @get:Bindable
data class FruitModel(var fruitImage: String?, var fruitName: String?) : BaseObservable() {
@get:Bindable
var imageUrl: String? = fruitImage
get() = field
set(value) {
field = value
notifyPropertyChanged(BR.imageUrl) // **unresolved reference : BR.imageUrl**
}
@get:Bindable
var nameValue: String? = fruitName
get() = field
set(value) {
field = value
notifyPropertyChanged(BR.nameValue) // **unresolved reference : BR.nameValue**
}
}