Android RecyclerView:将Alpha设置为“我的所有图像视图”,而不是特定视图

Android RecyclerView:将Alpha设置为“我的所有图像视图”,而不是特定视图,android,android-layout,kotlin,android-recyclerview,Android,Android Layout,Kotlin,Android Recyclerview,从列表(Cscore)中,我正在检索一个名为“currentscore”的特定值;我使用这个值来设置完全可见的图像和alpha设置为0.5f的图像之间的线 例如: // CurrentScore = 4 Item 0: alpha 1 .... Item 4: alpha 1 Item 5: alpha 0.5f ... 我正在使用带有适配器的RecyclerView执行此操作: class ImageAdapter(var mList: MutableList<out Csco

从列表(Cscore)中,我正在检索一个名为“currentscore”的特定值;我使用这个值来设置完全可见的图像和alpha设置为0.5f的图像之间的线

例如:

// CurrentScore = 4 

Item 0: alpha 1 
....
Item 4: alpha 1
Item 5: alpha 0.5f 
...
我正在使用带有适配器的RecyclerView执行此操作:

class ImageAdapter(var mList: MutableList<out Cscore>, var pos: Int) : RecyclerView.Adapter<ImageAdapter.ItemViewHolder> () {


    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
        var view = LayoutInflater.from(parent?.context).inflate(R.layout.img_layout, parent, false)
        return ItemViewHolder(view)
    }

    override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
        var data = mList[pos]
        for (i in 0..data.maxscore) {
            Picasso.get().load(data.imgurl).into(holder?.currentImage)
            if(i>= data.currentscore) {
                holder?.currentImage.alpha = 0.5f
                }

        }

    }

    override fun getItemCount(): Int {
        return mList.size

    }

 class ItemViewHolder(itemView: View?) : RecyclerView.ViewHolder(itemView!!) {
        var currentImage: ImageView = itemView?.findViewById(R.id.ImageView)!!

    }
}
我最终将所有ImageView设置为alpha=0.5f,而不仅仅是超出给定限制(currentscore)的项目


为什么会发生这种情况?

我不确定这是否是您想要的,但您可以尝试下面的代码吗

override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {

    var data = mList[position]
    var currentScore = mList[pos].currentscore

    Picasso.get().load(data.imgurl).into(holder?.currentImage)
    if(position < currentScore) {
        holder?.currentImage.alpha = 1
    } else {
        holder?.currentImage.alpha = 0.5f
    }
}
覆盖BindViewHolder(holder:ItemViewHolder,位置:Int){
var数据=mList[位置]
var currentScore=mList[pos]。currentScore
Picasso.get().load(data.imgurl).into(holder?.currentImage)
如果(位置<当前分数){
保持架?.currentImage.alpha=1
}否则{
保持架?.currentImage.alpha=0.5f
}
}

可能是不同类型的比较?也许您的data.currentscore是一个字符串,而i是Int,因此比较总是正确的true@javierCuervascurrentscore是一个整数,检查是否已
RecyclerView
正在重用视图。在检查条件之前,请尝试添加
alpha=1.0f
。对于这种编辑行为,我感到抱歉,我重写了我的评论:这一条解决了它!我可以问一个相关的问题吗:如果我的适配器中有两行项目,且跨度计数有限制(7)/行:
imagesrow.setLayoutManager(新的GridLayoutManager(mContext,7,LinearLayoutManager.VERTICAL,false))。在有了两行图像后,我在适配器中失去了“水平居中”的适当性。在给适配器馈电之后,我可以修复这个问题吗?老实说,我认为最好提出一个新问题。通过这种方式,您可以包含有关布局和GridLayout的更多信息。您还可以包括屏幕截图。我想这会更好。洛克:)谢谢你先生解决了我的问题,半天的时间都浪费在这个问题上-
if(i>= data.currentscore) {
    holder?.currentImage.alpha = 0.5f
}
override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {

    var data = mList[position]
    var currentScore = mList[pos].currentscore

    Picasso.get().load(data.imgurl).into(holder?.currentImage)
    if(position < currentScore) {
        holder?.currentImage.alpha = 1
    } else {
        holder?.currentImage.alpha = 0.5f
    }
}