为什么 setAlpha() 在 RecyclerViews 中不起作用?

Why is setAlpha() not working in RecyclerViews?

我正在尝试根据某些用户输入更改 RecyclerView 中项目视图的透明度。

if (quantity>0) {
    holder.itemView.setAlpha((float) 1);
} else {
    holder.itemView.setAlpha((float) 0.65);
}

当数量 > 0 时,将 alpha 从 0.65 更改为 1 效果很好。但相反的情况在另一种情况下不起作用。 调试时,它清楚地显示通过行 holder.itemView.setAlpha((float) 0.65); 但是,alpha 并没有减少。关于发生了什么的任何线索?

回收商的 ItemAnimator 在更新项目过程中更改了 alpha 你可以尝试添加

((SimpleItemAnimator) myRecyclerView.getItemAnimator()).setSupportsChangeAnimations(false);

我遇到了同样的问题。不要更改 itemView 的 alpha,而是为根布局命名并更改其 alpha,因为 recyclerview 动画处理 itemView alpha 动画使其无法工作。

删除项目动画

在Java中:

mRecyclerView.setItemAnimator(null);

或者在 Kotlin 中:

recycler_view.itemAnimator = null

认为这是 HolderView class

class MyViewHolder(val viewHolder: View) : RecyclerView.ViewHolder(view)

考虑一下您的适配器 class 从内部看的样子

// ...

override fun onBindViewHolder(holder: MyViewHolder, i: Int) {
    holder.viewHolder.alpha = 0.65f
}

有时,如果您的代码是 holder.viewHolder.alpha = 0.65f,它并不总是有效!

除此之外,您还可以像那样使用主容器的 alpha

<RelativeLayout
    android:id="@+id/viewMain"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    ... Your other components goes here

</RelativeLayout>

现在,从您的适配器改用它,它应该适用于所有情况

// ...

override fun onBindViewHolder(holder: MyViewHolder, i: Int) {
    holder.viewMain.alpha = 0.65f
}