RecyclerView: устанавливает Alpha для всех моих ImageViews вместо определенных - PullRequest
1 голос
/ 03 октября 2019

Из списка (Cscore) Я получаю определенное значение, называемое «currenttscore»;Я использую это значение, чтобы установить грань между изображениями, которые будут полностью видны, и изображениями с альфа-значением, установленным на 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)!!

    }
}

с этим макетом:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView android:id="@+id/ImageView"
        android:layout_width="20dp"
        android:layout_height="20dp" />
</LinearLayout>

Проблема здесь заключается между этими строками кода:

if(i>= data.currentscore) {
    holder?.currentImage.alpha = 0.5f
}

В итоге все мои ImageViews установлены на alpha = 0.5f, а не только элементы после моего заданного предела (currenttscore).

Почему это происходит?

1 Ответ

1 голос
/ 03 октября 2019

Я не уверен, что это то, что вы хотите, но вы можете попробовать код ниже?

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
    }
}
...