【发布时间】:2018-03-21 01:21:18
【问题描述】:
我在 CustomAdapter 类中将 mSelectedItem 定义为公共 var,我认为当我在内部类 ViewHolder 中使用 mSelectedItem 时,mSelectedItem=getAdapterPosition() 会没问题。
但是失败了,并显示“Unresolved reference: mSelectedItem”错误,为什么?
还有,在 Kotlin 中 getAdapterPosition() 有什么好方法,有提示显示“此检查报告调用 java get 和 set 方法可以替换为使用 Kotlin 合成属性”,但它会导致错误当我使用mSelectedItem=getAdapterPosition 时。
class CustomAdapter (val backupItemList: List<MSetting>) : RecyclerView.Adapter<CustomAdapter.ViewHolder>() {
public var mSelectedItem = -1
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomAdapter.ViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.item_recyclerview, parent, false)
return ViewHolder(v)
}
override fun onBindViewHolder(holder: CustomAdapter.ViewHolder, position: Int) {
holder.bindItems(backupItemList[position])
holder.itemView.radioButton.setChecked(position == mSelectedItem);
}
override fun getItemCount(): Int {
return backupItemList.size
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bindItems(aMSetting: MSetting) {
itemView.radioButton.tag=aMSetting._id
itemView.textViewUsername.text=aMSetting.createdDate.toString()
itemView.textViewAddress.text=aMSetting.description
mSelectedItem=getAdapterPosition() //It will cause error
}
}
}
【问题讨论】:
-
因为不是
inner class ViewHolder。 -
谢谢,我该如何解决?
-
但是ViewHolder是被CustomAdapter封装的,为什么不是inner class呢?
-
只是
class。这不是inner class。将其指定为inner class,它应该可以工作。
标签: android kotlin custom-adapter