【问题标题】:Constructor of inner class ViewHolder can be called only with receiver of containing class内部类 ViewHolder 的构造函数只能被包含类的接收者调用
【发布时间】:2018-11-28 14:46:20
【问题描述】:

我想使用 RxJava2 在 RecyclerView 项目上设置一个监听器。这些项目是复选框。我想分别听每个项目。 所以我得到一个错误内部类ViewHolder的构造函数只能用包含类的接收器调用

返回 TraceAdapter.ViewHolder(视图)

class TraceAdapter(private var checkList: List<TraceViewModelRow> = listOf()) :
    RecyclerView.Adapter<TraceAdapter.ViewHolder>() {

private val publishSubject = PublishSubject.create<Event>()
val events: Observable<Event> = publishSubject

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TraceAdapter.ViewHolder {
    val view = LayoutInflater.from(parent.context).inflate(R.layout.item_trace_task, parent, false)
    return TraceAdapter.ViewHolder(view)
}

override fun getItemCount(): Int = checkList.size

override fun onBindViewHolder(holder: TraceAdapter.ViewHolder, position: Int) {

    holder.bindTraceList(checkList[position])

}

override fun onViewRecycled(holder: ViewHolder) {
    super.onViewRecycled(holder)
}

inner class ViewHolder(override val containerView: View) : RecyclerView.ViewHolder(containerView), LayoutContainer {

    fun bindTraceList(trace: TraceViewModelRow) {
        with(trace) {
            checkbox_itemText.clicks()
                    .map { checkList[layoutPosition] }
                    .subscribe { publishSubject }

            checkbox_itemText.text = description
            checkbox_itemText.isChecked = isChecked
        }
    }
}
}

【问题讨论】:

    标签: android android-recyclerview kotlin rx-java2 rx-binding


    【解决方案1】:

    我认为你只需要更改这一行:

    return TraceAdapter.ViewHolder(view)

    到这里:

    return ViewHolder(view)

    由于您已将其明确标记为内部类,因此它需要外部类的实例,默认情况下您会获得该实例,因为您是从外部类中构建它的。但是,前提是您不使用外部类类型作为前缀,如上所示。

    内部类和嵌套类之间的区别在 Kotlin 和 Java 中略有不同(Java 使用术语 static 表示没有外部类实例的嵌套类)。更详细的解释here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-25
      • 2019-02-23
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多