web-dev-qa-db-ja.com

innerclassから変数にアクセスできません:Kotlin android

AndroidでのKotlin開発は初めてです。ここでは、以下のように、その内部クラスからクラスで定義された変数にアクセスしようとしています。

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.*からインポートされたビューIDにアクセスすることさえできません。

私はJavaでそのような方法で変数にアクセスできましたが、stackoverflowに関する多くの質問を読みましたが、まだ答えが得られませんでした。

17
Irony Stack

アダプタで内部修飾子を使用する必要があります。

この修飾子は、内部クラスが外部クラスのメンバーにアクセスできるようにします

リファレンス: https://kotlinlang.org/docs/reference/nested-classes.html

ネストされたクラスをinnerとして定義すると、外部クラスのメンバー変数にアクセスできます。

class OuterClass{

var accessMe ="access me from Inner Class"

    inner class InnerClass{

       //....
    }

}
8

高速で簡単な方法でこの質問に答えるには、次のようなことをします:

class OuterClass{

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

    //....
}

これで、CustomObjectContextからStringになります。

2
pouya