【发布时间】:2017-04-14 15:01:18
【问题描述】:
问题:RecyclerView 的子项 ImageView 出现故障错误
我有一个 RecyclerView。每个项目都有 ID 为“like”的 ImageView,它基本上是一个空星。
当我们点击某个项目的“Like”时,例如第一个,星号从空的变成黄色,表示该项目被点赞。
当我们点击第一项时,一切正常,一切都应该是,但同时,我们有一个错误,将第六项的“喜欢”更改为实心星,这是不应该做的,因为这个项目还没有被喜欢。
如果我们点击第二个项目的点赞 - 第七个项目会有同样的错误。
要填充 ViewHolder 中的项目,我有一个模型 - 食谱。
open class Recipe constructor(open var label: String,
open var image: String,
open var url: String,
open var ingredients: RealmList<Ingredient>?,
open var calories: Float,
open var totalWeight: Float,
open var id: Int,
open var isFavorite: Boolean) : RealmObject()
所以当点击某个项目时,我会检查它是否是收藏夹,并相应地更改“喜欢”的 ImageView。
有人知道我应该如何解决这个问题吗?
我尝试关闭适配器中的项目回收,但不幸的是,在这种情况下,“喜欢”状态也没有保存。
“喜欢”按钮的 OnClick 监听器
itemView.like.onClick {
if (recipe.isFavorite) {
itemView.like.image = ContextCompat.getDrawable(itemView.context, R.drawable.ic_star_before_like)
recipe.isFavorite = false
DatabaseService.removeRecipeFromFavorites(recipe)
itemView.context.toast("Recipe removed from favorites.")
} else {
itemView.like.image = ContextCompat.getDrawable(itemView.context, R.drawable.ic_star_after_like)
recipe.isFavorite = true
DatabaseService.addNewFavoriteRecipe(recipe)
itemView.context.toast("Recipe added to favorites.")
}
}
XML 文件
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="0.8"
android:gravity="center|right"
android:orientation="horizontal">
<ImageView
android:id="@+id/like"
android:layout_width="@dimen/icon_size_card"
android:layout_height="@dimen/icon_size_card"
android:padding="5dp"
android:layout_marginRight="@dimen/icon_margin_card"
android:src="@drawable/ic_star_before_like" />
<ImageView
android:id="@+id/share"
android:layout_width="@dimen/icon_size_card"
android:layout_height="@dimen/icon_size_card"
android:padding="5dp"
android:layout_marginRight="@dimen/icon_margin_card"
android:src="@drawable/ic_share" />
<ImageView
android:id="@+id/save"
android:layout_width="@dimen/icon_size_card"
android:layout_height="@dimen/icon_size_card"
android:padding="5dp"
android:layout_marginRight="@dimen/icon_margin_card"
android:src="@drawable/ic_save_recipe" />
<ImageView
android:id="@+id/expand"
android:layout_width="@dimen/icon_size_card"
android:layout_height="@dimen/icon_size_card"
android:padding="5dp"
android:layout_marginRight="@dimen/icon_margin_card"
android:src="@drawable/ic_down_arrow" />
</LinearLayout>
【问题讨论】:
标签: java android xml jvm kotlin