[英]Kotlin: How can an inner class get access to a variable declared as a parameter in an outer class?
我有一个DetailAdapter
类,其参数categoryId
类型为String
。 我需要在内部类DetailHolder
访问此变量。 我收到以下错误:
未解决的参考:categoryId
我怎么解决这个问题?
class DetailAdapter(lifecycleOwner: LifecycleOwner, categoryId: String) : FirebaseRecyclerAdapter<Detail, DetailAdapter.DetailHolder>(DetailAdapter.buildOptions(lifecycleOwner, categoryId)) {
companion object {
private fun buildQuery(categoryId: String) = FirebaseDatabase.getInstance()
.reference
.child("").child("details").child(categoryId)
.limitToLast(50)
private fun buildOptions(lifecycleOwner: LifecycleOwner, categoryId: String) = FirebaseRecyclerOptions.Builder<Detail>()
.setQuery(buildQuery(categoryId), Detail::class.java)
.setLifecycleOwner(lifecycleOwner)
.build()
}
class DetailHolder(val customView: View, var detail: Detail? = null) : RecyclerView.ViewHolder(customView) {
private val TAG = DetailHolder::class.java.simpleName
fun bind(detail: Detail) {
with(detail) {
customView.textView_name?.text = detail.detailName
customView.textView_description?.text = detail.detailDescription
val detailId = detail.detailId
customView.setOnClickListener {
// do something
}
customView.setOnLongClickListener(
{
showDeleteDetailDialog(it, categoryId, detailId)
true
}
)
}
}
代码中的DetailHolder
是一个嵌套类,而不是内部类(它在Java中的等价物将是一个static
嵌套类)。
要定义内部类,您需要使用inner
关键字:
inner class DetailHolder( ...
这样, DetailHolder
将保持对其封闭类( DetailAdapter
)的隐式引用,您也可以访问其属性。
查看有关嵌套和内部类的文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.