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に関する多くの質問を読みましたが、まだ答えが得られませんでした。
アダプタで内部修飾子を使用する必要があります。
この修飾子は、内部クラスが外部クラスのメンバーにアクセスできるようにします
リファレンス: https://kotlinlang.org/docs/reference/nested-classes.html
ネストされたクラスをinner
として定義すると、外部クラスのメンバー変数にアクセスできます。
class OuterClass{
var accessMe ="access me from Inner Class"
inner class InnerClass{
//....
}
}
高速で簡単な方法でこの質問に答えるには、次のようなことをします:
class OuterClass{
private var accessibleInside: CustomObject? = null
inner class InnerClass{
//....
}
これで、CustomObject
はContext
からString
になります。