Kotlin:内部类如何访问在外部类中声明为参数的变量



我有一个DetailAdapter类,其参数categoryId类型为 String 。我需要在内部类DetailHolder中访问此变量。我收到以下错误:

未解析的引用:类别 ID

我该如何解决这个问题?

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(的隐式引用,并且您也可以访问其属性。

查看有关嵌套类和内部类的文档。

最新更新