2017-09-23 5 views
4

私はアンドロイドでKotlin開発には初めてです。ここでは、クラス内で定義されている変数に、内部クラスからアクセスしようとしています。innerclassから変数にアクセスできない: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.*からインポートされたビューIDにアクセスできません。

私はjavaのような方法で変数にアクセスできましたが、私はstackoverflowで多くの質問を読んだことがありますが、私はまだ答えを得ていませんでした。

+1

利用内側のではなく、内部=)あなたの解決のために –

答えて

8

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

この修飾子は、内部クラスが

リファレンス外部クラスのメンバーにアクセスする必要があります:あなたは外部クラスのメンバ変数にアクセスすることができますhttps://kotlinlang.org/docs/reference/nested-classes.html

+0

感謝。この小さな間違いは2日から私に襲われて、あなたはもう1日を救った –

+0

あなたは大歓迎です!内部と内部の名前は本当に扱いにくいです...保護されたまま続けると良いと思います –

+0

私は保護された内部と内部の違いはわかりませんが、私自身でそれを並べ替えることを試みます –

1

はインナーとして、あなたのネストされたクラスを定義し

class OuterClass{ 

var accessMe ="access me from Inner Class" 

inner class InnerClass{ 

    //.... 
} 

}

関連する問題