Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在RecyclerView上设置alpha,但未选择子级(Kotlin)_Android_Kotlin_Android Recyclerview_Alpha - Fatal编程技术网

Android 在RecyclerView上设置alpha,但未选择子级(Kotlin)

Android 在RecyclerView上设置alpha,但未选择子级(Kotlin),android,kotlin,android-recyclerview,alpha,Android,Kotlin,Android Recyclerview,Alpha,我正在寻找一种方法来设置RecyclerView中所有元素的alpha值,而无需迭代元素 基本上,我可以设置整个回收器的alpha,所有子对象都将继承该alpha,但当我更新选定子对象的alpha时,它仍然从其父对象继承值,而不是更新其自己的alpha值。所有这些都必须在单击具有以下clickListener的项目时发生 // it is the view on which the listener is called that belongs to the recycler private v

我正在寻找一种方法来设置RecyclerView中所有元素的alpha值,而无需迭代元素

基本上,我可以设置整个回收器的alpha,所有子对象都将继承该alpha,但当我更新选定子对象的alpha时,它仍然从其父对象继承值,而不是更新其自己的alpha值。所有这些都必须在单击具有以下clickListener的项目时发生

// it is the view on which the listener is called that belongs to the recycler
private val click = View.OnClickListener {
   recycler.alpha = 0.2f
   it.alpha = 1f
}
我检查了项目是否被正确选择,以及是否调用了clickListener。问题似乎是alpha是从父视图
视图组继承的,但在中,我找不到任何关于无法更改子视图
中继承的alpha值的信息


我错过了什么?如果设置父视图组的alpha是不可行的,有没有办法避免迭代所有元素并为每个元素设置alpha值?

它不是继承的-子元素作为父元素的一部分绘制。因此,由于整个父母都有这个阿尔法,孩子们就用这个阿尔法画出来了。将子对象上的alpha设置为
0.2f
,将使该子对象更加透明


最好的办法可能是在RecyclerView.Adapter子类的
onBindViewHolder
方法中正确设置alpha,并通过更改备份数据和
notify…
方法来更改alpha。尝试在适配器之外更改RecyclerView子视图会带来麻烦,因为RecyclerView不知道这些子视图,并且可能会更改您的内容、添加更多视图等。

“它不是继承的-子视图是作为父视图的一部分绘制的。”这是为什么?我天真地认为alpha将是继承的属性“CSS”样式。问题是,我希望避免将alpha保存在数据中,并
通知…
,因为这需要遍历所有未选中的项来更新它们。猜测在这种情况下,最好的方法是让视图观察包含所选项目的属性,并根据它们是否被选中(没有多个项目选择)进行渲染。“为什么?”Android视图就是这样工作的。只要您注意保持位置的最新信息(请记住,如果viewholder在数据集中的位置发生变化,它可能不会被重新绑定),使用所选项目观察属性是可行的。最后,我做了一些类似于使用live data中解释的事情。对我来说,这比
getChangePayload(int-oldItemPosition,int-newItemPosition)