Подтвердить что ты не робот

Невозможно получить доступ к переменной из внутреннего класса: Kotlin android

Я новичок в разработке Kotlin в android. здесь я пытаюсь получить доступ к переменной, определенной в классе из этого внутреннего класса, как показано ниже.

class MainActivity : AppCompatActivity() {

    var frags: MutableList<Fragment> = mutableListOf()

//.............onCreate and other methods ....

    internal class CustAdapter(var arrayList: ArrayList<NavigationData>) : RecyclerView.Adapter<CustAdapter.MyViewHolder>() {
    override fun onBindViewHolder(holder: MyViewHolder?, position: Int) {
        holder!!.bindItems(arrayList[position])
    }

    override fun getItemCount(): Int {
        return arrayList.size
    }
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustAdapter.MyViewHolder {
        val v = LayoutInflater.from(parent.context).inflate(R.layout.navigation_item, parent, false)
        return MyViewHolder(v)
    }

    class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        fun bindItems(data: NavigationData) {


            itemView.setOnClickListener {
                   frags.add(BoardFrag()) ///// here i'm getting error "unresolved symbol"

            }
        }
    }
}    
}

внутри внутреннего класса MyViewHolder он не позволяет мне получить доступ к любой переменной внешней области.

даже я не могу получить доступ к идентификаторам видимости, импортированным из import kotlinx.android.synthetic.main.activity_main.* внутри внутренних методов класса.

Я смог получить доступ к переменным таким образом в java, но я прочитал много вопросов о stackoverflow, но пока не получил ответа.

4b9b3361

Ответ 1

Вы должны использовать внутренний модификатор в своем адаптере.

Этот модификатор делает внутренний класс доступ к членам внешнего класса

Ссылка: https://kotlinlang.org/docs/reference/nested-classes.html

Ответ 2

Определите свой вложенный класс как inner, тогда вы сможете получить доступ к переменной члена внешнего класса.

class OuterClass{

var accessMe ="access me from Inner Class"

    inner class InnerClass{

       //....
    }

}

Ответ 3

чтобы быстро ответить на этот вопрос, я бы сделал следующее:

class OuterClass{

private var accessibleInside: CustomObject? = null
inner class InnerClass{

    //....
}

Теперь CustomObject может быть чем угодно, от Context до String, надеюсь, это кому-нибудь поможет.