0

I'm using a RecyclerAdapter for the first time. I implemented it via a tutorial and it works fine so far. The way I'm using it is like a popup, so you click on a button and this button changes the opacity of the RecyclerView to 0.8 so it get's visible. Now I want to make the whole RecyclerView invisible after Clicking on an RecyclerItem. Cause the RecyclerView calls another Class "RecyclerAdapter" I'm wondering how I can address the RecyclerView there.

class RecyclerAdapter(private var titles: List<String>, private var details: List<String>, private var images:List<Int>) : RecyclerView.Adapter<RecyclerAdapter.ViewHolder>(){
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){

    val itemTitle: TextView = itemView.findViewById(R.id.ks_title)
    val itemDetail: TextView = itemView.findViewById(R.id.ks_descr)
    val itemImage: ImageView = itemView.findViewById(R.id.ks_image)

    init {
        itemView.setOnClickListener { v: View ->
            val position: Int = adapterPosition
            Toast.makeText(
                itemView.context,
                "Kartensatz # ${position + 1} gewählt",
                Toast.LENGTH_SHORT
            ).show()
            SpielEinstellungen.kartensatz = adapterPosition + 1
            // -> NEED TO CHANGE ALPHA OF RECYCLERVIEW TO 0 HERE )
        }
    }
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
   val v = LayoutInflater.from(parent.context).inflate(R.layout.kartensaetze,parent,false)
    return ViewHolder(v)
}

override fun getItemCount(): Int {
    return titles.size
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    holder.itemTitle.text = titles[position]
    holder.itemDetail.text = details[position]
    holder.itemImage.setImageResource(images[position])
}

}

c_ph_r
  • 117
  • 2
  • 11

1 Answers1

1

The best way is described in this answer: Is there a better way of getting a reference to the parent RecyclerView from the adapter?

lateinit var recycler: RecyclerView

override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
    super.onAttachedToRecyclerView(recyclerView)
    recycler = recyclerView
}

You introduce a local variable in the RecyclerAdapter which is initialized when the onAttachedToRecyclerView is called, then you can use that.

inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){

    val itemTitle: TextView = itemView.findViewById(R.id.ks_title)
    val itemDetail: TextView = itemView.findViewById(R.id.ks_descr)
    val itemImage: ImageView = itemView.findViewById(R.id.ks_image)

    init {
        itemView.setOnClickListener {
            Toast.makeText(itemView.context,
                "Kartensatz # ${adapterPosition + 1} gewählt",
                Toast.LENGTH_SHORT).show()

            SpielEinstellungen.kartensatz = adapterPosition + 1
            recycler.alpha(0f)
        }
    }
}
rtsketo
  • 607
  • 5
  • 9