0

I'm new to kotlin. I'm using the following code in my Adapter:

class TravelListAdapter(private var context: Context) : RecyclerView.Adapter<TravelListAdapter.MyViewHolder>() {

    lateinit var onClickListener: TravelListAdapterListener
    lateinit var holderView: View

    interface TravelListAdapterListener {
        fun onClickListener(v: View, position: Int)
    }


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

        private lateinit var txtLabel: TextView

        fun MyViewHolder(view: View) {

            holderView = view // holderView shows error

            // in line below, holderView and onClickListener shows error
            holderView.setOnClickListener(
                View.OnClickListener { v -> onClickListener.onClickListener(v, adapterPosition) }
            )
        }

    }

    ...
    ...
}

The variables onClickListener and holderView have been declared in the Adapter class, but give this error when I access them in another class ( which is defined inside the Adapter class ):

Unresolved reference: variable_name

Can anyone tell me what I'm doing wrong ??

mrid
  • 5,782
  • 5
  • 28
  • 71

2 Answers2

4

In Kotlin, you can directly access the member of outer class from the nested class.

In order to access the outer class members, you need to make your class as inner class as given in below snippt.

class OuterClass{

    var name="john"

    inner class InnerClass{

       //....
    }

}

So, here you need to define you MyViewHolder class inner class MyViewHolder

You can also check the same on this link https://stackoverflow.com/a/46730214/4083237

AaRiF
  • 2,980
  • 2
  • 14
  • 13
1

Nested classed don't have access to outer class members.

Make your MyViewHolder an inner class.

Read more here https://kotlinlang.org/docs/reference/nested-classes.html

Rachit Mishra
  • 6,101
  • 4
  • 30
  • 51