为什么我不能在内部 class ViewHolder 中使用 var mSelectedItem?
Why can't I use the var mSelectedItem in inner class ViewHolder?
我在 class CustomAdapter 中将 mSelectedItem 定义为 public var,我认为当我在内部 class ViewHolder 中使用 mSelectedItem 时 mSelectedItem=getAdapterPosition()
会正常。
但是失败了,并且显示"Unresolved reference: mSelectedItem"错误,为什么?
还有,Kotlin中getAdapterPosition()
有什么好办法,有提示显示"This inspection reports calls to java get and set methods that can be replaced with use of Kotlin synthetic properties",但是用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
}
}
}
ViewHolder 是 Recycler 而不是 operator.if 你想要获得位置,你把这个 mSelectedItem = position
放在 onBindViewHolder.And 这个名为 getAdapterPosition() 的方法总是与 notifyItemsetChanged( ).希望这对你有帮助。
如果您不想让 ViewHolder 成为 inner class
(您不应该这样做),您可以创建一个类似于 AdapterSelection 的 class,其中包含一个字段 var selectedItem:Int
并将 public var mSelectedItem = -1
替换为 private var mSelectedItem = AdapterSelection(-1
)。然后将 mSelectedItem
传递给 bind
方法(bindItems(aMSetting: MSetting, adapterSelection:AdapterSelection)
并在绑定内部设置位置 adapterSelection.selectedItem = getAdapterPosition()
.
您本可以通过适配器本身,但它很乱,这就是为什么我建议制作另一个 class。
我在 class CustomAdapter 中将 mSelectedItem 定义为 public var,我认为当我在内部 class ViewHolder 中使用 mSelectedItem 时 mSelectedItem=getAdapterPosition()
会正常。
但是失败了,并且显示"Unresolved reference: mSelectedItem"错误,为什么?
还有,Kotlin中getAdapterPosition()
有什么好办法,有提示显示"This inspection reports calls to java get and set methods that can be replaced with use of Kotlin synthetic properties",但是用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
}
}
}
ViewHolder 是 Recycler 而不是 operator.if 你想要获得位置,你把这个 mSelectedItem = position
放在 onBindViewHolder.And 这个名为 getAdapterPosition() 的方法总是与 notifyItemsetChanged( ).希望这对你有帮助。
如果您不想让 ViewHolder 成为 inner class
(您不应该这样做),您可以创建一个类似于 AdapterSelection 的 class,其中包含一个字段 var selectedItem:Int
并将 public var mSelectedItem = -1
替换为 private var mSelectedItem = AdapterSelection(-1
)。然后将 mSelectedItem
传递给 bind
方法(bindItems(aMSetting: MSetting, adapterSelection:AdapterSelection)
并在绑定内部设置位置 adapterSelection.selectedItem = getAdapterPosition()
.
您本可以通过适配器本身,但它很乱,这就是为什么我建议制作另一个 class。