我在CustomAdapter类中将mSelectedItem定义为公共(public)变量,当我在内部类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
}
}
}
最佳答案
如果您不希望将ViewHolder设置为inner class
(您不应该这样做),则可以创建一个像AdapterSelection这样的类,该类的内部带有一个var selectedItem:Int
字段,然后将public var mSelectedItem = -1
替换为private var mSelectedItem = AdapterSelection(-1
。然后将mSelectedItem
传递给bind
方法(bindItems(aMSetting: MSetting, adapterSelection:AdapterSelection)
和绑定(bind)内部,设置位置adapterSelection.selectedItem = getAdapterPosition()
。
您可能已经通过了适配器本身,但这很麻烦,这就是为什么我建议制作另一个类。